package me.zhengjie.modules.transfer.factory.service.Impl;

import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.swagger.models.auth.In;
import lombok.RequiredArgsConstructor;
import me.zhengjie.modules.account.factory.service.AccountComputer;
import me.zhengjie.modules.account.factory.vo.AnnualConversionTransverse;
import me.zhengjie.modules.account.mapper.AccountCommonMapper;
import me.zhengjie.modules.finance.domain.FinanceAd01;
import me.zhengjie.modules.finance.service.FinanceAd01Service;
import me.zhengjie.modules.sequence.domain.Sequence;
import me.zhengjie.modules.sequence.service.SequenceService;
import me.zhengjie.modules.transfer.domain.TransferIc58;
import me.zhengjie.modules.transfer.factory.service.TransCheckService;
import me.zhengjie.modules.transfer.factory.service.TransferInformationService;
import me.zhengjie.modules.transfer.factory.vo.*;
import me.zhengjie.modules.transfer.mapper.TransferIc89Mapper;
import me.zhengjie.modules.transfer.service.TransferIc58Service;
import me.zhengjie.modules.transfer.service.TransferIc89Service;
import me.zhengjie.modules.transfer.service.TransferIc90Service;
import me.zhengjie.tool.*;
import me.zhengjie.vo.Constant;
import me.zhengjie.vo.StandardVO;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class TransferInformationServiceImpl implements TransferInformationService {


    private final TransCheckService transCheckService;

    private final AccountComputer accountComputer;
    private final SequenceService sequenceService;



    @Override
    public void check(MyMap map) {
        NPETool.isEmptyThrowException(map.getAsString("aac001"), "人员编号");
        NPETool.isEmptyThrowException(map.getAsString("aae140"), "发起方险种类型");
        NPETool.isEmptyThrowException(map.getAsString("aae241"), "接收方险种类型");
        NPETool.isEmptyThrowException(map.getAsString("aac306"), "转移数据来源");
        NPETool.isEmptyThrowException(map.getAsString("aic113"), "转移制度方向");
        NPETool.isEmptyThrowException(map.getAsString("aac010"), "人员户籍地址");

    }

    /**
     * 转出通用
     * 校验
     */
    @Override
    public void transferOutCheck(String aac001, String aae140, String aae241, String aac306, String aic113) {

        // 1.人员已停保
        transCheckService.checkAac031(aac001, aae140, "530111");
        // 2.人员不能有欠费
        transCheckService.checkQF(aac001, aae140);
        // 3.人员不能有重读缴费
        transCheckService.checkCFJF(aac001, aae140);
        // 4.人员不能存在在途业务
        transCheckService.checkZTYE(aac001, null);
        //5.人员离退休标识不能是已退休
        transCheckService.checkAac084(aac001, aae140);


    }

    /**
     * 转入通用
     * 校验
     */
    @Override
    public void transferInCheck(InformationInfo informationInfo, InformationDetailInfo informationDetailInfos) {
//
//        NPETool.isEmptyThrowException(informationInfo, "信息表信息");
//        NPETool.isEmptyThrowException(informationDetailInfos, "信息表明细信息");
//
//        String aae270new = informationInfo.getAae270();
//        NPETool.isEmptyThrowException(aae270new, "联系函编号");
//        // 1.校验人员正常参保
//        //  TransCheckService.checkAac008(this.getAac001(), this.getAae241());
//        // 2.校验转入申请
////        if (!(informationInfo instanceof Ic96Info) && !("1".equals(this.transConanctInfo)) && !("1".equals(this.transModifyInfo))) { // 过滤军转 军转没有转入申请
////            //       TransCheckService.checkApplication(aae270new, this.getAae241(), this.getAae140());
////        }
//        // 3.校验是否已办理转入
//        MyMap myMap = new MyMap();
//        myMap.put("aae270", aae270new);
////        myMap.put("aac001", aac001);
//        myMap.put("aac306", Constant.AAC306_2_YD);
//        if (!"1".equals(this.transModifyInfo) && !("1".equals(this.transConanctInfo))) {
//            List<Map> transferProcess = new ArrayList<>();
////                List<Map> transferProcess = RepositoryRegister.transferRepository().queryProcessInfo(myMap);
//            if (!ValidateUtil.isEmpty(transferProcess)) {
//
//                for (Map map : transferProcess) {
//                    if (Constant.AAE803_T0102_ZYJXXXB.equals(map.get("aae803")) || Constant.AAE803_T0502_ZRDFQDLSZHZ.equals(map.get("aae803"))
//                            || Constant.AAE803_T0601_JRTYYLBXCBJFPZHXXB.equals(map.get("aae803")) || Constant.AAE803_T0703_CXJMYLBXZRCZZGYLBXXXB.equals(map.get("aae803"))
//                            || Constant.AAE803_T0802_CZZGYLBXZRCXJMYLBXXXB.equals(map.get("aae803")) || Constant.AAE803_T0902_CXJBYLBXKDQZYSPB.equals(map.get("aae803"))
//                            || Constant.AAE803_T1102_JGYLBXZYXXB.equals(map.get("aae803")) || Constant.AAE803_T1201_JGSYYLBXCZCTRYZYXXB.equals(map.get("aae803"))
//                            || Constant.AAE803_T1302_JGSYYLBXZYNJZYXXB.equals(map.get("aae803"))) {
//                        throw new IllegalArgumentException("当前联系函已办理了转入");
//                    }
//                }
//            }
//        }
//
//
//        if (ValidateUtil.isNotEmpty(this.funds)) {
//            BigDecimal aae019 = BigDecimal.ZERO;
//            for (MyMap fund : this.funds) {
//                aae019 = aae019.add(fund.getAsBigDecimal("aae019"));
//            }
//            if (!ValidateUtil.isEmpty(aae019)) {
//                if (aae019.compareTo(money) != 0) {
//                    throw new IllegalArgumentException("财务到账金额和转移金额不一致！");
//                }
//            }
//        }

    }


    /**
     * 组装信息表明细
     *
     * @param ac08s
     * @param ac51s
     * @return
     */
    @Override
    public List<Ic91Info> matchPaymentAndAccount(List<MyMap> ac08s, List<MyMap> ac51s, TransferPersonInfo transferPersonInfo) {

        NPETool.isEmptyThrowException(ac08s, "缴费信息！");

        StandardVO standardVO = new StandardVO("aae003", "Integer", "asc");
        ListUtil.sorts(ac08s, standardVO);
        // 转移年度
        int zydn = DateUtil.getYear(DateUtil.getCurrentTime());
        //缓存内存
        MyMap cacheMap = new MyMap();
        //到账日期
        Integer aab191;
        //数据来源
        String aae741;
        //地方应缴类型
        String aae793;
        //ac51a2
        Map pram = new HashMap();
        pram.put("aac001", "");
        pram.put("aaz159", "");

        Map<String, List<MyMap>> aae001GroupMap = new HashMap<>();

        BigDecimal aaa041;
        BigDecimal aaa045;

        //处理缴费数据
        //基數 本金 比例 為0 的去掉
        Iterator<MyMap> iterator = ac08s.iterator();
        MyMap ac08Source;
        while (iterator.hasNext()) {
            ac08Source = iterator.next();
            if ((ValidateUtil.isEmpty(ac08Source.getAsBigDecimal("aae020")) || BigDecimal.ZERO.compareTo(ac08Source.getAsBigDecimal("aae020")) == 0)

                    && (ValidateUtil.isEmpty(ac08Source.getAsBigDecimal("aae022")) || BigDecimal.ZERO.compareTo(ac08Source.getAsBigDecimal("aae022")) == 0)
                    && (ValidateUtil.isEmpty(ac08Source.getAsBigDecimal("aae180")) || BigDecimal.ZERO.compareTo(ac08Source.getAsBigDecimal("aae180")) == 0)
                    && (ValidateUtil.isEmpty(ac08Source.getAsBigDecimal("aae202")) || BigDecimal.ZERO.compareTo(ac08Source.getAsBigDecimal("aae202")) == 0)
                    && (ValidateUtil.isEmpty(ac08Source.getAsBigDecimal("aaa043")) || BigDecimal.ZERO.compareTo(ac08Source.getAsBigDecimal("aaa043")) == 0)
                    && (ValidateUtil.isEmpty(ac08Source.getAsBigDecimal("aaa041")) || BigDecimal.ZERO.compareTo(ac08Source.getAsBigDecimal("aaa041")) == 0)
                    && (ValidateUtil.isEmpty(ac08Source.getAsBigDecimal("aaa045")) || BigDecimal.ZERO.compareTo(ac08Source.getAsBigDecimal("aaa045")) == 0)

            ) {
                iterator.remove();
            }
        }

        //处理负数基数补差 负比例补差
        List<MyMap> minusBcList = ac08s.stream().filter(
                ac08 -> (Constant.AAA115_22_JFJSDZTS.equals(ac08.get("aaa115")) || Constant.AAA115_21_JFBLDZTS.equals(ac08.get("aaa115")))).collect(Collectors.toList());

        if (ValidateUtil.isNotEmpty(minusBcList)) {
            ac08s.removeAll(minusBcList);
            NPETool.isEmptyThrowException(ac08s, "正常缴费明细信息");

            minusBcList.forEach(minus -> {

                ac08s.forEach(ac08 -> {
                    if (minus.getAsString("aae003").equals(ac08.getAsString("aae003")) && ac08.getAsInteger("aae202").intValue() > 0
                            && !Constant.AAA115_34_JFJSDZBJ.equals(ac08.getAsString("aaa115"))
                            && !Constant.AAA115_35_JFBLDZBJ.equals(ac08.getAsString("aaa115"))
                            && !Constant.AAA115_21_JFBLDZTS.equals(ac08.getAsString("aaa115"))
                            && !Constant.AAA115_22_JFJSDZTS.equals(ac08.getAsString("aaa115"))) {

                        //基数补退
                        if (Constant.AAA115_22_JFJSDZTS.equals(minus.getAsString("aaa115"))) {
                            BigDecimal aae180_cal = ac08.getAsBigDecimal("aae180");
                            ac08.put("aae180", aae180_cal.add(minus.getAsBigDecimal("aae180")));
                        } else if (Constant.AAA115_21_JFBLDZTS.equals(minus.getAsString("aaa115"))) {
                            BigDecimal aaa043_cal = ac08.getAsBigDecimal("aaa043");
                            BigDecimal aaa045_cal = ac08.getAsBigDecimal("aaa045");
                            ac08.put("aaa043", aaa043_cal.add(minus.getAsBigDecimal("aaa043")));
                            ac08.put("aaa045", aaa045_cal.add(minus.getAsBigDecimal("aaa045")));
                        }

                        BigDecimal aae081_cal = ac08.getAsBigDecimal("aae081");
                        BigDecimal aae022_cal = ac08.getAsBigDecimal("aae022");
                        BigDecimal aae083_cal = ac08.getAsBigDecimal("aae083");

                        ac08.put("aae081", aae081_cal.add(minus.getAsBigDecimal("aae081")));
                        ac08.put("aae083", aae083_cal.add(minus.getAsBigDecimal("aae083")));
                    }

                });
            });

        }

        List<MyMap> aa29s = queryPersonBusinessYears(transferPersonInfo.getAaz159().toString(), transferPersonInfo.getAac001().toString(), 1980);//TODO 徐完善 自然年度与业务年度的关系


        for (MyMap ac08Map : ac08s) {

            aae741 = ac08Map.getAsString("aae741");
            aae793 = ac08Map.getAsString("aae793");
            aab191 = ac08Map.getAsInteger("aab191");

            aaa041 = ac08Map.getAsBigDecimal("aaa041");
            aaa045 = ac08Map.getAsBigDecimal("aaa045");

            //个人统筹缴费比例转换为单位统筹缴费比例
            if (aaa041.compareTo(aaa045) > 0) {
                ac08Map.put("aaa042", ac08Map.getAsBigDecimal("aaa042").add(aaa041.subtract(aaa045)));
            }

            //缴费记录为空的 设置比例
            if (ValidateUtil.isEmpty(ac08Map.getAsBigDecimal("aaa042")) || BigDecimal.ZERO.compareTo(ac08Map.getAsBigDecimal("aaa042")) == 0) {
                //   transOutDeal.setNullProportion(ac08Map);
            }

            //赋值业务年度
            if ((Constant.AAE793_1061_ZR.equals(aae793)
                    || Constant.AAE793_1010_ZRCF.equals(aae793)
                    || Constant.AAE793_1062_JGZR.equals(aae793)
                    || Constant.AAE793_1063_CXZR.equals(aae793)
                    || Constant.AAE793_1064_JRZR.equals(aae793)
                    || Constant.AAE741_4_YDZDNZR.equals(aae741)
                    || Constant.AAE741_5_YDZDNZR.equals(aae741)
                    || Constant.AAE741_6_KZDZR.equals(aae741)
                    || Constant.AAE741_7_KZDZR.equals(aae741))) {
                //存在转移缴费
                if (ValidateUtil.isEmpty(aae001GroupMap)) {

                    ac08Map.put("aae001", Integer.valueOf(aab191.toString().substring(0, 4)));

                } else {
                    setTransferBusinessYear(ac08Map, aae001GroupMap);
                }
                //     ac08Map.put("transferRecord", "transferRecord");
            } else {
                // transOutDeal.setBusinessYear(ac08Map);
            }

            //赋值自然年度
            if (Integer.valueOf(aab191.toString().substring(0, 4)) == zydn && ac08Map.getAsInteger("aae003") / 100 != zydn) {
                //转移当年补缴往年的
                ac08Map.put("aae001_zr", Integer.valueOf(aab191.toString().substring(0, 6)));
            } else {

                ac08Map.put("aae001_zr", Integer.valueOf(aab191.toString().substring(0, 4)));
            }

            if (Integer.valueOf(aab191.toString().substring(0, 4)).intValue() == zydn && ac08Map.getAsInteger("aae003") / 100 == zydn
                    && (Constant.AAA115_34_JFJSDZBJ.equals(ac08Map.getAsString("aaa115")) || Constant.AAA115_35_JFBLDZBJ.equals(ac08Map.getAsString("aaa115")))) {
                //转移当年补缴当年
                ac08Map.put("aae001_zr", Integer.valueOf(aab191.toString().substring(0, 6)));
            }

            if ("910000".equals(ac08Map.getAsString("aab301")) || Constant.AAE793_1064_JRZR.equals(ac08Map.getAsString("aae793"))) {
                ac08Map.put("aae013", "退役军人");
            }

            //赋值业务年度
            for (MyMap aa29 : aa29s) {
                if ((new BigDecimal(aa29.get("aae042").toString()).compareTo(new BigDecimal(ac08Map.get("aae003").toString())) >= 0) &&
                        (new BigDecimal(aa29.get("aae041").toString()).compareTo(new BigDecimal(ac08Map.get("aae003").toString())) <= 0)) {
                    ac08Map.put("aae001_yw", Integer.valueOf(aa29.get("aae001").toString()));
                }
            }
        }


        List<Ic91Info> informationVOS = new ArrayList<>();
        //是否需要单独生成一条缴费数据
        boolean aloneflag;
        //合并缴费记录
        for (MyMap myMap : ac08s) {
            aloneflag = false;
            String aae013_bc = myMap.getAsString("aae013");
            if ("基数补缴".contains(aae013_bc) || "比例补缴".contains(aae013_bc)
                    || "补缴".contains(aae013_bc) || "按规模调整账户".equals(aae013_bc)
                    || "包括建账前个人缴费".contains(aae013_bc) || "曾办理异地转入".contains(aae013_bc)
                    || "退役军人".contains(aae013_bc) || "定额缴费".contains(aae013_bc)
                    || "按规定账户规模调整".contains(aae013_bc) || "临时缴费账户".contains(aae013_bc) || "预缴".contains(aae013_bc)) {
            } else {
                myMap.put("aae013", "");
            }
            for (Ic91Info ic91Info : informationVOS) {
                if (ic91Info.getAae001().intValue() == myMap.getAsInteger("aae001") && ic91Info.getAab299().equals(myMap.getAsString("aab299"))
                        && ic91Info.getAae180().compareTo(myMap.getAsBigDecimal("aae180")) == 0 && ic91Info.getAaa041().compareTo(myMap.getAsBigDecimal("aaa045")) == 0
                        && ic91Info.getAaa042().compareTo(myMap.getAsBigDecimal("aaa042")) == 0 && ic91Info.getAaa043().compareTo(myMap.getAsBigDecimal("aaa043")) == 0
                        && ic91Info.getAae013().equals(myMap.getAsString("aae013")) && ic91Info.getAae001_zr().intValue() == myMap.getAsInteger("aae001_zr").intValue() && ic91Info.getAae001_yw().intValue() == myMap.getAsInteger("aae001_yw").intValue()) {
                    if (ic91Info.getAae202().intValue() * myMap.getAsInteger("aae202").intValue() > 0) {// 有缴费月数
                        // 期号连续
                        if (Math.abs(DateUtil.getBetweenCountIssue(ic91Info.getAae042().intValue(), myMap.getAsInteger("aae003"))) == 2
                                && ic91Info.getAae042().intValue() / 100 == myMap.getAsInteger("aae003") / 100) {
                            aloneflag = true;
                            ic91Info.setAae042(myMap.getAsBigDecimal("aae003")); // 缴费截止期号
                            ic91Info.setAae202(ic91Info.getAae202().add(myMap.getAsBigDecimal("aae202"))); // 月数
                            // 转移当年添加本金利息
                            if (zydn == myMap.getAsInteger("aae001") || zydn == myMap.getAsInteger("aae001") / 100) {
                                ic91Info.setAae381(ValidateUtil.isEmpty(ic91Info.getAae381()) ? BigDecimal.ZERO : ic91Info.getAae381().add(myMap.getAsBigDecimal("aae081")).add(myMap.getAsBigDecimal("aae083"))); // 记账金额
                                ic91Info.setAae264(ValidateUtil.isEmpty(ic91Info.getAae264()) ? BigDecimal.ZERO : ic91Info.getAae264().add(myMap.getAsBigDecimal("aae083"))); // 记账金额中的个人缴费部分
                                ic91Info.setAae269(ValidateUtil.isEmpty(ic91Info.getAae269()) ? BigDecimal.ZERO : ic91Info.getAae269().add(myMap.getAsBigDecimal("aae789")).add(myMap.getAsBigDecimal("aae791"))); // 记账利息
                                ic91Info.setAae265(ValidateUtil.isEmpty(ic91Info.getAae265()) ? BigDecimal.ZERO : ic91Info.getAae265().add(myMap.getAsBigDecimal("aae791"))); // 记账利息中的个人缴费部分
                            }
                            break;
                        }
                    } else if (ic91Info.getAae202().intValue() + myMap.getAsInteger("aae202").intValue() == 0) {// 无缴费月数
                        if (Math.abs(DateUtil.getBetweenCountIssue(ic91Info.getAae042().intValue(), myMap.getAsInteger("aae003"))) == 2
                                && ic91Info.getAae042().toString().substring(0, 4).equals(myMap.getAsInteger("aae003").toString().substring(0, 4))) {
                            aloneflag = true;
                            ic91Info.setAae042(myMap.getAsBigDecimal("aae003")); // 缴费截止期号
                            // 转移当年添加本金利息
                            if (zydn == myMap.getAsInteger("aae001") || zydn == myMap.getAsInteger("aae001") / 100) {
                                ic91Info.setAae381(ValidateUtil.isEmpty(ic91Info.getAae381()) ? BigDecimal.ZERO : ic91Info.getAae381().add(myMap.getAsBigDecimal("aae081")).add(myMap.getAsBigDecimal("aae083"))); // 记账金额
                                ic91Info.setAae264(ValidateUtil.isEmpty(ic91Info.getAae264()) ? BigDecimal.ZERO : ic91Info.getAae264().add(myMap.getAsBigDecimal("aae083"))); // 记账金额中的个人缴费部分
                                ic91Info.setAae269(ValidateUtil.isEmpty(ic91Info.getAae269()) ? BigDecimal.ZERO : ic91Info.getAae269().add(myMap.getAsBigDecimal("aae789")).add(myMap.getAsBigDecimal("aae791"))); // 记账利息
                                ic91Info.setAae265(ValidateUtil.isEmpty(ic91Info.getAae265()) ? BigDecimal.ZERO : ic91Info.getAae265().add(myMap.getAsBigDecimal("aae791"))); // 记账利息中的个人缴费部分
                            } else {
                                ic91Info.setAae381(BigDecimal.ZERO);
                                ic91Info.setAae264(BigDecimal.ZERO);
                                ic91Info.setAae269(BigDecimal.ZERO);
                                ic91Info.setAae265(BigDecimal.ZERO);
                            }
                            break;
                        }
                    }
                }
            }

            // 如果不能合并则单独生成一条
            if (!aloneflag) {
                Ic91Info ic91VoMid = new Ic91Info();

                ic91VoMid.setAab301(transferPersonInfo.getAab359()); // 转出地行政区划代码
                ic91VoMid.setAab299(transferPersonInfo.getAab359());
                if (!ValidateUtil.isEmpty(ic91VoMid.getAab299())) {
                    if ("910000".equals(ic91VoMid.getAab299())) {
                        ic91VoMid.setAab300("军队");
                    } else {

                        ic91VoMid.setAab300("官渡区");//todo 码表中文字段
                    }
                }

                ic91VoMid.setAae001(myMap.getAsBigDecimal("aae001")); // 年度
                ic91VoMid.setAae041(myMap.getAsBigDecimal("aae003")); // 缴费起始时间
                ic91VoMid.setAae042(myMap.getAsBigDecimal("aae003")); // 缴费终止时间
                ic91VoMid.setAae202(myMap.getAsBigDecimal("aae202")); // 月数
                ic91VoMid.setAae180(myMap.getAsBigDecimal("aae180")); // 缴费基数
                ic91VoMid.setAaa041(myMap.getAsBigDecimal("aaa045")); // 个人缴费比例
                ic91VoMid.setAaa042(myMap.getAsBigDecimal("aaa042")); // 单位缴费比例
                ic91VoMid.setAaa043(myMap.getAsBigDecimal("aaa043")); // 单位缴费划入个人账户比例
                if (!ValidateUtil.isEmpty((myMap.getAsString("aae013")))) {
                    ic91VoMid.setAae013(myMap.getAsString("aae013")); // 备注
                } else {
                    ic91VoMid.setAae013(""); // 备注
                }
                if ("transferRecord".equals(myMap.getAsString("transferRecord"))) {
                    ic91VoMid.setTransferRecod("transferRecord");
                }
                //ic91VoMid.setAaa115(ac43zyVO.getAaa115()); //应缴类型
                // 转移当年添加本金利息
                if (zydn == myMap.getAsInteger("aae001") || zydn == myMap.getAsInteger("aae001") / 100) {
                    ic91VoMid.setAae381(myMap.getAsBigDecimal("aae081").add(myMap.getAsBigDecimal("aae083"))); // 记账金额
                    ic91VoMid.setAae264(myMap.getAsBigDecimal("aae083")); // 记账金额中的个人缴费部分
                    ic91VoMid.setAae265(myMap.getAsBigDecimal("aae789").add(myMap.getAsBigDecimal("aae791"))); // 记账利息
                    ic91VoMid.setAae269(myMap.getAsBigDecimal("aae791")); // 记账利息中的个人缴费部分
                } else {
                    ic91VoMid.setAae381(BigDecimal.ZERO);
                    ic91VoMid.setAae264(BigDecimal.ZERO);
                    ic91VoMid.setAae269(BigDecimal.ZERO);
                    ic91VoMid.setAae265(BigDecimal.ZERO);
                }
                ic91VoMid.setAac001(myMap.getAsBigDecimal("aac001"));
                ic91VoMid.setAae001_zr(myMap.getAsBigDecimal("aae001_zr"));
                ic91VoMid.setAae001_yw(myMap.getAsBigDecimal("aae001_yw"));
                informationVOS.add(ic91VoMid);
            }
        }

        if (ValidateUtil.isNotEmpty(informationVOS)) {
            informationVOS = informationVOS.stream().sorted(Comparator.comparing(Ic91Info::getAae001_zr).thenComparing(Ic91Info::getAae041)).collect(Collectors.toList());
        }

        //新增的明细（结转所在月数据）
        List<Ic91Info> informationVOS_add = new ArrayList<>();
        //是否需要生成结转月月记录（false表示需要生成）
        boolean createflag = false;
        //用于信息表排序
        long index = 1;
        //年度结转计息所在月
        BigDecimal ndjzjxszy = BigDecimal.ZERO;
        //转移数据年度类型，zr表示用的自然年度，yw标识的业务年度
        String ndlx = "zr";
        //上一条结转年月
        BigDecimal jzny_syt = BigDecimal.ZERO;
        //上一条数据的备注
        String aae013_syt = "无";
        //上条参保行政区
        String aab301_st = "";//aab299
        //上条参保行政区
        String aab300_st = "";//getCodeDesc("AAB301", aab299, null);

        //匹配组装缴费明细和账户明细
        if (ValidateUtil.isNotEmpty(ac51s)) {
            StandardVO standardVO1 = new StandardVO("aae001", "Integer", "asc");
            ac51s = ListUtil.sorts(ac51s, standardVO1);
            if (ValidateUtil.isEmpty(transferPersonInfo.getAae206())) {
                throw new IllegalArgumentException("存在个人账户台帐，建立账户时间不能为空！");
            }

            int firstAae001 = ((BigDecimal) ac51s.get(0).get("aae001")).intValue();

            int yearBetween;

            //明细VO
            Ic91Info informationVO;

            List<Ic91Info> informationVOS_1 = new ArrayList<>();

            Ic91Info informationVO_add;

            for (int i = 0; i < informationVOS.size(); i++) {
                informationVO = informationVOS.get(i);


                if (informationVO.getAae001_zr().intValue() < firstAae001) {
                    //业务年度
                    Integer aae001 = informationVO.getAae001().intValue();
                    //informationVO.setCae089(Integer.valueOf(index));
                    aab301_st = informationVO.getAab299();
                    aab300_st = informationVO.getAab300();
                    index++;
                    yearBetween = 0;
                    if (i < informationVOS.size() - 1 && informationVO.getAae001_zr().intValue() != informationVOS.get(i + 1).getAae001_zr().intValue()) {//本条与下条作了结转

                        //本地缴费处理，转移记录跳过
                        if (!"transferRecord".equals(informationVO.getTransferRecod())) {
                            //判断本条是否有结转年月
                            for (MyMap aa29 : aa29s) {
                                if (aae001.intValue() == aa29.getAsInteger("aae001").intValue()) {
                                    ndjzjxszy = aa29.getAsBigDecimal("aae042");//本条结转年月
                                }
                            }

                            if (informationVO.getAae042().intValue() < ndjzjxszy.intValue()) {//没有结转年月
                                informationVO_add = new Ic91Info();
                                //informationVO_add.setCae089(Integer.valueOf(index));
                                informationVO_add.setAab299(aab301_st);//沿用上一条的参保地
                                informationVO_add.setAab300(aab300_st); // 参保地名称
                                informationVO_add.setAae001(informationVO.getAae001_zr()); // 年度
                                informationVO_add.setAae001_zr(informationVO.getAae001_zr()); //自然年度
                                informationVO_add.setAae041(ndjzjxszy); // 缴费起始时间
                                informationVO_add.setAae042(ndjzjxszy); // 缴费终止时间
                                informationVO_add.setAae202(BigDecimal.ZERO); // 月数
                                informationVO_add.setAae180(BigDecimal.ZERO); // 缴费基数
                                informationVO_add.setAaa041(BigDecimal.ZERO); // 个人缴费比例
                                informationVO_add.setAaa042(BigDecimal.ZERO); // 单位缴费比例
                                informationVO_add.setAaa043(BigDecimal.ZERO); // 单位缴费划入个人账户比例
                                informationVO_add.setAae381(null); // 记账金额
                                informationVO_add.setAae264(null); // 记账金额中的个人缴费部分
                                informationVO_add.setAae269(null); // 记账利息
                                informationVO_add.setAae265(null); // 记账利息中的个人缴费部分
                                informationVO_add.setAae382(BigDecimal.ZERO); // 至本年末账户累计储存额
                                informationVO_add.setAae273(BigDecimal.ZERO); // 至本年末账户累计储存额中的个人缴费部分
                                //informationVO_add.setTransferRecod(false);
                                informationVO_add.setAae013(null); // 备注
                                informationVOS_1.add(informationVO_add);
                                index++;
                            }
                        }


                        if (i < informationVOS.size() - 1 && informationVOS.get(i + 1).getAae001_zr().intValue() - informationVO.getAae001_zr().intValue() > 1) {//年度不连续，生成中断年度结转
                            yearBetween = informationVOS.get(i + 1).getAae001_zr().intValue() - informationVO.getAae001_zr().intValue() - 1;
                        }
                    }
//                    BigDecimal aaa041_add = BigDecimal.ZERO;
//                    BigDecimal aaa042_add = BigDecimal.ZERO;
                    // 如果是最后一条，则检查是否与firstAae001连续，若不连续则补上中断的年度结转
                    if (i == informationVOS.size() - 1 && informationVO.getAae001_zr().intValue() < firstAae001) {
//                        aaa041_add = NPETool.isEmptyReturnZero(informationVO.getAaa041());
//                        aaa042_add = NPETool.isEmptyReturnZero(informationVO.getAaa042());
                        yearBetween = firstAae001 - informationVO.getAae001_zr().intValue() - 1;
                    }
                    if (yearBetween > 0) {
                        int aae041 = 0;
                        for (int j = 1; j <= yearBetween; j++) {//整年中断了
                            if (informationVO.getAae001_zr().intValue() + j < firstAae001) {

                                for (MyMap aa29 : aa29s) {
                                    if (informationVO.getAae001_zr().intValue() + j == aa29.getAsInteger("aae001").intValue()) {
                                        aae041 = aa29.getAsInteger("aae042");//本条结转年月
                                    }
                                }
                                informationVO_add = new Ic91Info();
                                //informationVO_add.setCae089(Integer.valueOf(index));
                                informationVO_add.setAab299(aab301_st);//沿用上一条的参保地
                                informationVO_add.setAab300(aab300_st); // 参保地名称
                                informationVO_add.setAae001(informationVO.getAae001_zr().add(new BigDecimal(j))); // 年度
                                informationVO_add.setAae001_zr(informationVO.getAae001_zr().add(new BigDecimal(j))); //自然年度
                                //informationVO_add.setAae041(Integer.valueOf((informationVO.getAae001_zr().intValue() + j) + "12")); // 缴费起始时间
                                //informationVO_add.setAae042(Integer.valueOf((informationVO.getAae001_zr().intValue() + j) + "12")); // 缴费终止时间

                                informationVO_add.setAae041(new BigDecimal(aae041)); // 缴费起始时间
                                informationVO_add.setAae042(new BigDecimal(aae041)); // 缴费终止时间
                                informationVO_add.setAae202(BigDecimal.ZERO); // 月数
                                informationVO_add.setAae180(BigDecimal.ZERO); // 缴费基数
                                informationVO_add.setAaa041(BigDecimal.ZERO); // 个人缴费比例
                                informationVO_add.setAaa042(BigDecimal.ZERO); // 单位缴费比例
                                informationVO_add.setAaa043(BigDecimal.ZERO); // 单位缴费划入个人账户比例
                                informationVO_add.setAae381(null); // 记账金额
                                informationVO_add.setAae264(null); // 记账金额中的个人缴费部分
                                informationVO_add.setAae269(null); // 记账利息
                                informationVO_add.setAae265(null); // 记账利息中的个人缴费部分
                                informationVO_add.setAae382(BigDecimal.ZERO); // 至本年末账户累计储存额
                                informationVO_add.setAae273(BigDecimal.ZERO); // 至本年末账户累计储存额中的个人缴费部分
                                //informationVO_add.setTransferRecod(false);
                                informationVO_add.setAae013(null); // 备注
                                informationVOS_1.add(informationVO_add);
                                index++;
                            }
                        }
                    }
                }

            }
            informationVOS.addAll(informationVOS_1);//添加


            //转移数据结转年月
            BigDecimal zyjzny = BigDecimal.ZERO;
            //账户年度
            int ac51_aae001 = 0;
            //缴费明细最大年度
            BigDecimal detail_aae001 = BigDecimal.ZERO;

            for (Map ac51Map : ac51s) {
                ac51_aae001 = ((BigDecimal) ac51Map.get("aae001")).intValue();
                if (ac51_aae001 >= zydn) {
                    continue;
                }


                if (!(ac51_aae001 == zydn)) {//非转移当年
                    createflag = false;
                    // 当年记账金额
                    BigDecimal dnjzje = (BigDecimal) ac51Map.get("aae381");

                    // 当年记账金额个人部分
                    BigDecimal dnjzjegr = (BigDecimal) ac51Map.get("aae264");

                    for (int i = 0; i < informationVOS.size(); i++) {

                        informationVO = informationVOS.get(i);

                        if (i == informationVOS.size() - 1) {
                            detail_aae001 = informationVO.getAae001_zr();
                        }
                        if (ac51Map.get("aae001").toString().equals(informationVO.getAae001().toString())) {
                            aab301_st = informationVO.getAab299();
                            aab300_st = informationVO.getAab300();

                            informationVO.setAae381(null);
                            informationVO.setAae264(null);
                            //informationVO.setCae089(index);
                            index++;
                            if (!"transferRecord".equals(informationVO.getTransferRecod())) {//本地数据
                                for (MyMap aa29 : aa29s) {
                                    if (informationVO.getAae001().intValue() == aa29.getAsInteger("aae001")) {
                                        ndjzjxszy = aa29.getAsBigDecimal("aae042"); //获取业务年度对应结束年月
                                        break;
                                    }
                                }
                                //本地缴费刷新年度类型
                                ndlx = "zr";
                            } else {//转移数据

                                if (i < informationVOS.size() - 1) {

                                    //台帐年度和转移记录业务年度在同一年度
                                    if (ac51Map.get("aae001").toString().equals(informationVOS.get(i).getAae001().toString())) {
                                        if (
                                            //下一条数据为预缴数据，取本条作为结转年月参考
                                                (informationVOS.get(i).getAae001_zr().intValue() == Integer.parseInt(informationVOS.get(i).getAae042().toString().substring(0, 4))
                                                        && (informationVOS.get(i).getAae001_zr().intValue() < Integer.parseInt(informationVOS.get(i + 1).getAae042().toString().substring(0, 4))
                                                        && informationVOS.get(i).getAae001_zr().intValue() == informationVOS.get(i + 1).getAae001_zr().intValue())
                                                )
                                                        //下一条数据与本条数据业务年度跨年，取本条作为结转年月参考
                                                        || !ac51Map.get("aae001").toString().equals(informationVOS.get(i + 1).getAae001().toString())) {

                                            //
                                            //if (informationVOS.get(i).getAae001().intValue() < Integer.parseInt(informationVOS.get(i).getAae042().toString().substring(0, 4))) {
                                            //    ndlx = "yw";
                                            //} else {
                                            //    ndlx = "zr";
                                            //}


                                            //    if (!"12".equals(informationVOS.get(i).getAae042().toString().substring(4))) {
                                            //业务年度转移上年，需生成12月结转(可能没有12月的缴费，导致结转年月不对)
                                            if (informationVOS.get(i).getAae001_zr().intValue() == zydn - 1
                                                    && informationVOS.get(i).getAae001().intValue() == zydn - 1) {
                                                ndlx = "zr";
                                            } else {
                                                ndlx = "yw";
                                            }
                                            if (!ValidateUtil.isEmpty(informationVOS.get(i).getAae001_zr())) {
                                                List<MyMap> zrcurList = aae001GroupMap.get(informationVOS.get(i).getAae001().toString());
                                                if (ValidateUtil.isNotEmpty(zrcurList)) {
                                                    MyMap curZryear = zrcurList.get(zrcurList.size() - 1);
                                                    //  for (MyMap curZryear : zrcurList) {
                                                    if ((informationVOS.get(i).getAae001() + "12").equals(curZryear.getAsString("aae042"))) {
                                                        ndlx = "zr";
                                                        //     }
                                                    }
                                                }
                                            }

                                         /*   } else {
                                                ndlx = "zr";
                                            }*/
                                            //本条数据和台账在同一业务年度，下一条数据和台账不在同一年度则将台账数据放在本条数据
                                            if ("yw".equals(ndlx)) {
                                                ndjzjxszy = informationVOS.get(i).getAae042();//结转年度
                                                jzny_syt = ndjzjxszy;
                                            } else {
                                                if ("12".equals(informationVOS.get(i).getAae042().toString().substring(4, 6))
                                                        && Integer.valueOf(informationVOS.get(i).getAae001().toString().substring(0, 4)).intValue() == ac51_aae001) {
                                                    ndjzjxszy = informationVOS.get(i).getAae042();//结转年度
                                                    jzny_syt = ndjzjxszy;
                                                }
                                            }
                                        }

                                    }
                                } else if (i == informationVOS.size() - 1) {
                                    if ("zr".equals(ndlx) && "12".equals(informationVOS.get(i).getAae042().toString().substring(4, 6))) {//对于只有军队转移记录的数据，直接放台帐到最后一条
                                        ndjzjxszy = informationVOS.get(i).getAae042();
                                        jzny_syt = ndjzjxszy;
                                    }

                                    //最右一条数据是转移数据，业务年度，判断是否生成结转年月
                                    if ("yw".equals(ndlx)) {
                                        if (jzny_syt.intValue() > 0) {
                                            ndjzjxszy = new BigDecimal(Integer.valueOf(jzny_syt.toString().substring(0, 4)) + 1 + jzny_syt.toString().substring(4, 6));
                                        } else {
                                            ndjzjxszy = informationVOS.get(i).getAae042();
                                        }
                                        jzny_syt = ndjzjxszy;

                                    }
                                }
                            }
                            if (!ValidateUtil.isEmpty(ndjzjxszy) && informationVO.getAae042().equals(ndjzjxszy)
                                    && informationVO.getAae042().intValue() / 100 == informationVO.getAae001_zr().intValue()) {//可能存在预缴的情况，需要排除在外
                                //排除基数补差 比例补差
                                if (informationVO.getAae202().intValue() == 0 && BigDecimal.ZERO.compareTo(informationVO.getAae180()) < 0) {
                                    continue;
                                }
                                if (informationVO.getAae202().intValue() == 0 && BigDecimal.ZERO.compareTo(informationVO.getAae180()) < 0 && BigDecimal.ZERO.compareTo(informationVO.getAaa041()) > 0) {
                                    continue;
                                }
//                                if ((informationVO.getAae202() > 0 && BigDecimal.ZERO.compareTo(informationVO.getAae180()) == -1) || (informationVO.getAae202() == 0 && BigDecimal.ZERO.compareTo(informationVO.getAae180()) == 0)) {
                                informationVO.setAae381(dnjzje); // 记账金额
                                informationVO.setAae264(dnjzjegr); // 记账金额中的个人缴费部分
                                informationVO.setAae269((BigDecimal) ac51Map.get("aae269")); // 记账利息
                                informationVO.setAae265((BigDecimal) ac51Map.get("aae265")); // 记账利息中的个人缴费部分
                                informationVO.setAae382((BigDecimal) ac51Map.get("aae382")); // 至本年末账户累计储存额
                                informationVO.setAae273((BigDecimal) ac51Map.get("aae273")); // 至本年末账户累计储存额中的个人缴费部分
                                //informationVO.setJzzlx((BigDecimal) ac51Map.get("jzzlx")); // 截止上年末在本年产生的总利息
                                //informationVO.setJzgrzlx((BigDecimal) ac51Map.get("jzgrzlx")); // 截止上年末个人部分在本年产生的总利息
                                //informationVO.setZybnzlx((BigDecimal) ac51Map.get("zybnzlx")); // 转入本年产生的总利息
                                //informationVO.setZybngrzlx((BigDecimal) ac51Map.get("zybngrzlx")); // 转入本年个人部分产生的总利息
                                createflag = true;
                                ndjzjxszy = null;
                                break;
                            }
                        }

                        if (i < informationVOS.size() - 1 && "transferRecord".equals(informationVOS.get(i).getTransferRecod())
                                && Integer.parseInt(ac51Map.get("aae001").toString()) > informationVOS.get(i).getAae001().intValue()
                                && Integer.parseInt(ac51Map.get("aae001").toString()) < informationVOS.get(i + 1).getAae001().intValue()) {
                            //缴费数据年度不连续，需要生成一条空台账 按转移数据结转年月结转

                            if ("12".equals(informationVOS.get(i).getAae042().toString().substring(4, 6))) {//12月份的台账则
                                zyjzny = new BigDecimal(ac51Map.get("aae001").toString() + informationVOS.get(i).getAae042().toString().substring(4, 6));
                                jzny_syt = zyjzny;
                                ndlx = "zr";
                            } else {
                                if ("zr".equals(ndlx)) {
                                    zyjzny = new BigDecimal(ac51Map.get("aae001").toString() + "12");
                                    jzny_syt = zyjzny;
                                    ndlx = "zr";
                                } else {
                                    zyjzny = new BigDecimal(Integer.valueOf(jzny_syt.toString().substring(0, 4)) + 1 + informationVOS.get(i).getAae042().toString().substring(4, 6));
                                    jzny_syt = zyjzny;
                                    ndlx = "yw";
                                }
                            }
                        }


                        if ("transferRecord".equals(informationVOS.get(i).getTransferRecod()) && i == informationVOS.size() - 1 && Integer.parseInt(ac51Map.get("aae001").toString()) <= informationVOS.get(i).getAae001().intValue()) {//ic91为最后一条数据
                            if ("12".equals(informationVOS.get(i).getAae042().toString().substring(4, 6))) {//12月份的台账则
                                zyjzny = new BigDecimal(ac51Map.get("aae001").toString() + informationVOS.get(i).getAae042().toString().substring(4, 6));
                                jzny_syt = zyjzny;
                                ndlx = "zr";
                            } else {
                                if ("zr".equals(ndlx)) {
                                    zyjzny = new BigDecimal(ac51Map.get("aae001").toString() + "12");
                                    jzny_syt = zyjzny;
                                    ndlx = "zr";
                                } else {
                                    zyjzny = ValidateUtil.isEmpty(ndjzjxszy) ? new BigDecimal(ac51Map.get("aae001").toString() + "12") : ndjzjxszy;//对于缴费断缴的，结转年度默认为12月
                                    jzny_syt = zyjzny;
                                    ndlx = "yw";
                                }
                            }
                        }

                    }
                    //无结转月生成一条
                    if (!createflag) {
                        if (zyjzny.intValue() != 0) {//如果存在转移结转年月
                            ndjzjxszy = zyjzny;
                        } else if ("yw".equals(ndlx)) {
                            //数据生成中断缴费年结转月，判断结转所在月
                            ndjzjxszy = new BigDecimal(jzny_syt.intValue() / 100 + 1 + jzny_syt.toString().substring(4, 6));
                            jzny_syt = ndjzjxszy;
                        } else {
                            for (MyMap aa29 : aa29s) {
                                if (ac51Map.get("aae001").toString().equals(aa29.getAsString("aae001"))) {
                                    ndjzjxszy = aa29.getAsBigDecimal("aae042");//获取业务年度对应结束年月
                                    break;
                                }
                            }
                        }
                        for (Ic91Info transferInformationVO : informationVOS) {
                            if (Integer.parseInt(ac51Map.get("aae001").toString()) == transferInformationVO.getAae001().intValue()) {
                                aae013_syt = transferInformationVO.getAae013();
                            } else if (Integer.parseInt(ac51Map.get("aae001").toString()) - 1 == transferInformationVO.getAae001().intValue()) {
                                aae013_syt = transferInformationVO.getAae013();
                            }
                        }
                        //业务年度转移上年，需生成12月结转
                        if ("yw".equals(ndlx) && ndjzjxszy.intValue() / 100 == DateUtil.toIssue(DateUtil.getCurrentTime()) / 100 && !"12".equals(ndjzjxszy.toString().substring(4, 6))) {
                            ndjzjxszy = new BigDecimal(ndjzjxszy.intValue() / 100 - 1 + "12");

                        }

                        //跨业务年度且没有对应结转月的，生成一条对应结转月的
                        Ic91Info informationVO_zj = new Ic91Info();
                        //informationVO_zj.setCae089(index);
                        informationVO_zj.setAab299(aab301_st);
                        informationVO_zj.setAab300(aab300_st); // 参保地名称
                        informationVO_zj.setAae001(new BigDecimal(ac51Map.get("aae001").toString())); // 年度
                        informationVO_zj.setAae041(ndjzjxszy); // 缴费起始时间
                        informationVO_zj.setAae042(ndjzjxszy); // 缴费终止时间
                        informationVO_zj.setAae202(BigDecimal.ZERO); // 月数
                        informationVO_zj.setAae180(BigDecimal.ZERO); // 缴费基数
                        informationVO_zj.setAaa041(BigDecimal.ZERO); // 个人缴费比例
                        informationVO_zj.setAaa042(BigDecimal.ZERO); // 单位缴费比例
                        informationVO_zj.setAaa043(BigDecimal.ZERO); // 单位缴费划入个人账户比例
                        informationVO_zj.setAae381(dnjzje); // 记账金额
                        informationVO_zj.setAae264(dnjzjegr); // 记账金额中的个人缴费部分
                        informationVO_zj.setAae269((BigDecimal) ac51Map.get("aae269")); // 记账利息
                        informationVO_zj.setAae265((BigDecimal) ac51Map.get("aae265")); // 记账利息中的个人缴费部分
                        informationVO_zj.setAae382((BigDecimal) ac51Map.get("aae382")); // 至本年末账户累计储存额
                        informationVO_zj.setAae273((BigDecimal) ac51Map.get("aae273")); // 至本年末账户累计储存额中的个人缴费部分
                        informationVO_zj.setAae001_zr(new BigDecimal(ndjzjxszy.toString().substring(0, 4)));//自然年度
                        if (Integer.valueOf(ac51Map.get("aae001").toString()).intValue() >= 2010) {
                            if ("曾办理异地转入".equals(aae013_syt)) {
                                informationVO_zj.setAae013(""); // 备注
                            } else {
                                informationVO_zj.setAae013(aae013_syt); // 备注
                            }
                        } else {
                            if ("基数补缴".equals(aae013_syt) || "比例补缴".equals(aae013_syt)
                                    || "补缴".equals(aae013_syt) || "按规模调整账户".equals(aae013_syt)
                                    || "包括建账前个人缴费".equals(aae013_syt)) {
                                aae013_syt = "";
                            }
                            informationVO_zj.setAae013(aae013_syt); // 备注
                        }
                        //对于生成的数据 不备注
                        if (informationVO_zj.getAae001_zr().compareTo(detail_aae001) > 0) {
                            informationVO_zj.setAae013("");
                        }
                        //informationVO_zj.setTransferRecod(false);

                        informationVOS_add.add(informationVO_zj);
                        index++;
//                        zyjzny = 0;
                        ndjzjxszy = null;
                    }
                    zyjzny = BigDecimal.ZERO;
                }
            }
            informationVOS.addAll(informationVOS_add);
        } else {

            if (ValidateUtil.isEmpty(transferPersonInfo.getAae206())) {
                informationVOS.forEach(detail -> {
                    if (detail.getAae041().intValue() > transferPersonInfo.getAae206().intValue() && !ValidateUtil.isEmpty(detail.getAae202()) && detail.getAae202().intValue() > 0) {
                        throw new IllegalArgumentException("该人员存在建账后缴费，不存在个人账户，请联系维护人员核实数据！");
                    }
                });
            }


            //无台帐数据(只有建账前缴费数据的)

            Ic91Info informationVO = informationVOS.get(informationVOS.size() - 1);

            Integer aae001 = informationVO.getAae001_zr().intValue();
            String aae001_str = aae001.toString().substring(0, 4);

            for (MyMap aa29 : aa29s) {
                if (aae001_str.equals(aa29.getAsString("aae001"))) {
                    ndjzjxszy = aa29.getAsBigDecimal("aae042");//获取业务年度对应结束年月
                    break;
                }
            }
            if (!ValidateUtil.isEmpty(ndjzjxszy) && ndjzjxszy.equals(informationVO.getAae042())) {
                createflag = false;
            }

            if (createflag) {
                aae001 = Integer.valueOf(aae001.toString().substring(0, 4));
            } else {
                aae001 = Integer.valueOf(aae001.toString().substring(0, 4)) + 1;
            }

            for (int i = aae001.intValue(); i < zydn; i++) {

                for (MyMap aa29 : aa29s) {
                    if (aae001.equals(aa29.getAsInteger("aae001"))) {
                        ndjzjxszy = aa29.getAsBigDecimal("aae042");//获取业务年度对应结束年月
                        break;
                    }
                }

                Ic91Info informationVO_zj = new Ic91Info();
                //informationVO_zj.setCae089(index);
                informationVO_zj.setAab299(aab301_st);
                informationVO_zj.setAab300(aab300_st); // 参保地名称
                informationVO_zj.setAae001(new BigDecimal(aae001)); // 年度
                informationVO_zj.setAae041(ndjzjxszy); // 缴费起始时间
                informationVO_zj.setAae042(ndjzjxszy); // 缴费终止时间
                informationVO_zj.setAae202(BigDecimal.ZERO); // 月数
                informationVO_zj.setAae180(BigDecimal.ZERO); // 缴费基数
                informationVO_zj.setAaa041(BigDecimal.ZERO); // 个人缴费比例
                informationVO_zj.setAaa042(BigDecimal.ZERO); // 单位缴费比例
                informationVO_zj.setAaa043(BigDecimal.ZERO); // 单位缴费划入个人账户比例
                informationVO_zj.setAae381(BigDecimal.ZERO); // 记账金额
                informationVO_zj.setAae264(BigDecimal.ZERO); // 记账金额中的个人缴费部分
                informationVO_zj.setAae269(BigDecimal.ZERO); // 记账利息
                informationVO_zj.setAae265(BigDecimal.ZERO); // 记账利息中的个人缴费部分
                informationVO_zj.setAae382(BigDecimal.ZERO); // 至本年末账户累计储存额
                informationVO_zj.setAae273(BigDecimal.ZERO); // 至本年末账户累计储存额中的个人缴费部分
                informationVO_zj.setAae001_zr(new BigDecimal(ndjzjxszy.toString().substring(0, 4)));//自然年度
                informationVO_zj.setAae013("");
                //informationVO_zj.setTransferRecod(false);

                informationVOS_add.add(informationVO_zj);
                index++;
                aae001++;

            }
            informationVOS.addAll(informationVOS_add);
        }


        // 循环处理数据
        for (Ic91Info transferInformationVO : informationVOS) {
            transferInformationVO.setAac319(transferPersonInfo.getAac001().toString());

            //处理转出地行政区划
            if (ValidateUtil.isEmpty(transferInformationVO.getAab301())) {
                transferInformationVO.setAab301(transferPersonInfo.getAab359());
            }
            //处理参保地行政区划
            if (ValidateUtil.isEmpty(transferInformationVO.getAab299())) {
                transferInformationVO.setAab299(transferPersonInfo.getAab359());
                transferInformationVO.setAab300("");
            }

            //处理人员编号
            if (ValidateUtil.isEmpty(transferInformationVO.getAac001())) {
                transferInformationVO.setAac001(transferPersonInfo.getAac001());
            }
            // 处理月缴费基数
//            if (transferInformationVO.getAae180().compareTo(BigDecimal.ZERO) == 0) {
////                transferInformationVO.setAae180(null);
//            }
            // 处理单位缴费比例
            if (transferInformationVO.getAaa042().compareTo(BigDecimal.ZERO) == 0) {
                transferInformationVO.setAaa042(null); // 单位缴费比例
            }
            // 处理单位缴费划入账户比例
            if (transferInformationVO.getAaa043().compareTo(BigDecimal.ZERO) == 0) {
                transferInformationVO.setAaa043(null); // 单位缴费划入个人账户比例
            }
            // 处理个人缴费比例
            if (transferInformationVO.getAaa041().compareTo(BigDecimal.ZERO) == 0) {
                transferInformationVO.setAaa041(null); // 个人缴费比例
            }
            //if ("基数补差".equals(transferInformationVO.getAae013())) {//基数补差改为补缴
            //    transferInformationVO.setAae013("补缴");
            //}
            //if ("比例补差".equals(transferInformationVO.getAae013())) {//基数补差改为补缴
            //    transferInformationVO.setAae013("补缴");
            //}


            //不备注补缴 影响平台校验计算统筹基金
            if (!ValidateUtil.isEmpty(transferInformationVO.getAae180())) {
                if (transferInformationVO.getAae202().intValue() == 0 && BigDecimal.ZERO.compareTo(transferInformationVO.getAae180()) < 0) {
                    setAae013(transferInformationVO, "补缴");
                }
            }

            //将业务年段转为自然年度
            transferInformationVO.setAae001_yw(transferInformationVO.getAae001());
            transferInformationVO.setAae001(transferInformationVO.getAae001_zr());

            if (ValidateUtil.isNotEmpty(transferInformationVO.getAae013())) {
                //处理备注
                if (!transferInformationVO.getAae013().contains("曾办理异地转入")
                        && !transferInformationVO.getAae013().contains("退役军人")
                        && !transferInformationVO.getAae013().contains("补缴")
                        && !transferInformationVO.getAae013().contains("定额缴费")
                        && !transferInformationVO.getAae013().contains("包括建账前个人缴费")
                        && !transferInformationVO.getAae013().contains("按规定账户规模调整")
                        && !transferInformationVO.getAae013().contains("临时缴费账户")) {

                    transferInformationVO.setAae013("");
                }
            }


            if (transferInformationVO.getAae001_zr().intValue() < transferInformationVO.getAae041().intValue() / 100 && ValidateUtil.isEmpty(transferInformationVO.getAae013())) {
                if (ValidateUtil.isEmpty(transferInformationVO.getAae013())) {
                    transferInformationVO.setAae013("预缴");
                } else {
                    transferInformationVO.setAae013(transferInformationVO.getAae013() + ",预缴");
                }
            }

            if (transferInformationVO.getAae001_zr().intValue() > transferInformationVO.getAae041().intValue() / 100 && ValidateUtil.isEmpty(transferInformationVO.getAae013())) {
                if (ValidateUtil.isEmpty(transferInformationVO.getAae013())) {
                    transferInformationVO.setAae013("补缴");
                } else {
                    transferInformationVO.setAae013(transferInformationVO.getAae013() + ",补缴");
                }
            }

            //临时账户转出处理备注
            if (Constant.AAE803_T0502_ZRDFQDLSZHZ.equals(transferPersonInfo.getAae803())) {
                if (transferInformationVO.getAae041().intValue() / 100 >= 2010) {
                    if (ValidateUtil.isEmpty(transferInformationVO.getAae013())) {
                        transferInformationVO.setAae013("临时缴费账户");
                    } else {
                        transferInformationVO.setAae013(transferInformationVO.getAae013() + ",临时缴费账户");
                    }
                }
            }

            //定额缴费
            if (transferInformationVO.getAae001().intValue() < 1998 && !ValidateUtil.isEmpty(transferInformationVO.getAaa041()) && transferInformationVO.getAae180().compareTo(BigDecimal.ZERO) == 0) {//云南的定额缴费规则 1998年前，个人缴费比例大于0，缴费基数为0，
                if (ValidateUtil.isEmpty(transferInformationVO.getAae013())) {
                    //20220729 根据58号文 备注定额缴费，缴费基数置为空 ,个人缴费比例写个人缴费固定金额
                 /*   transferInformationVO.setAaa041(transferInformationVO.getAae180().multiply(transferInformationVO.getAae202()).
                            multiply(NumberUtil.nullDispose(transferInformationVO.getAaa043()).add(transferInformationVO.getAaa041())).setScale(2, BigDecimal.ROUND_UP));
                   */
                    transferInformationVO.setAae180(BigDecimal.ZERO);//定额缴费转出基数默认设置为0，设置为空 转入会有影响
                    transferInformationVO.setAae013("定额缴费");
                } else {
               /*     transferInformationVO.setAaa041(transferInformationVO.getAae180().multiply(transferInformationVO.getAae202()).
                            multiply(NumberUtil.nullDispose(transferInformationVO.getAaa043()).add(transferInformationVO.getAaa041())).setScale(2, BigDecimal.ROUND_UP));*/
                    transferInformationVO.setAae180(BigDecimal.ZERO);
                    transferInformationVO.setAae013(transferInformationVO.getAae013() + ",定额缴费");
                }
            }
            //处理建账前数据
//            if (!ValidateUtil.isEmpty(transferPersonInfo.getAae206())) {
//                if (transferInformationVO.getAae001().intValue() < transferPersonInfo.getAae206().intValue() / 100) {
//                    transferInformationVO.setAae382(null);
//                    transferInformationVO.setAae273(null);
//                    transferInformationVO.setAae381(null); // 记账金额
//                    transferInformationVO.setAae264(null); // 记账金额中的个人缴费部分
//                    transferInformationVO.setAae269(null); // 记账利息
//                    transferInformationVO.setAae265(null); // 记账利息中的个人缴费部分
//                }
//            }
            //处理转移当年数据
            if (zydn == transferInformationVO.getAae001().intValue() || zydn == transferInformationVO.getAae001().intValue() / 100) {
                if (!ValidateUtil.isEmpty(transferInformationVO.getAae269()) && BigDecimal.ZERO.compareTo(transferInformationVO.getAae269()) == 0) {
                    transferInformationVO.setAae269(null);
                }
                if (!ValidateUtil.isEmpty(transferInformationVO.getAae265()) && BigDecimal.ZERO.compareTo(transferInformationVO.getAae265()) == 0) {
                    transferInformationVO.setAae265(null);
                }
                transferInformationVO.setAae382(null); // 至本年末账户累计储存额
                transferInformationVO.setAae273(null); // 至本年末账户累计储存额中的个人缴费部分
            }

            //处理转移当年之前数据
            if (transferInformationVO.getAae001().intValue() < zydn) {
                //至本年末账户累计储存额有值时且大于0，除备注含“曾办理异地转入”字样的记录外，当年记账金额必须有值
                if (!ValidateUtil.isEmpty(transferInformationVO.getAae382()) && transferInformationVO.getAae382().compareTo(BigDecimal.ZERO) > 0
                        && transferInformationVO.getAae042().compareTo(transferPersonInfo.getAae206()) >= 0 && !"曾办理异地转入".equals(transferInformationVO.getAae013())) {

                    if (!ValidateUtil.isEmpty(transferInformationVO.getAae382()) && transferInformationVO.getAae382().compareTo(BigDecimal.ZERO) < 0) {
                        if (ValidateUtil.isEmpty(transferInformationVO.getAae381()) || transferInformationVO.getAae381().compareTo(BigDecimal.ZERO) == 0) {
                            transferInformationVO.setAae381(BigDecimal.ZERO); // 记账金额
                            transferInformationVO.setAae264(BigDecimal.ZERO); // 记账金额中的个人缴费部分
                            transferInformationVO.setAae269(BigDecimal.ZERO); // 记账利息
                            transferInformationVO.setAae265(BigDecimal.ZERO); // 记账利息中的个人缴费部分
                        }
                    }

                }

                //至本年末账户累计储存额有值时且大于0，备注含“曾办理异地转入”字样的记录，当年记账金额+记账金额中的个人缴费部分+记账利息+ 记账利息中的个人缴费部分置为空
                if (!ValidateUtil.isEmpty(transferInformationVO.getAae382()) && transferInformationVO.getAae382().compareTo(BigDecimal.ZERO) > 0
                        && transferInformationVO.getAae042().compareTo(transferPersonInfo.getAae206()) >= 0 && "曾办理异地转入".equals(transferInformationVO.getAae013())) {
                    if (transferInformationVO.getAae381().compareTo(BigDecimal.ZERO) == 0) {
                        transferInformationVO.setAae381(null); // 记账金额
                        transferInformationVO.setAae264(null); // 记账金额中的个人缴费部分
                        transferInformationVO.setAae269(null); // 记账利息
                        transferInformationVO.setAae265(null); // 记账利息中的个人缴费部分
                    }
                }

                if (ValidateUtil.isEmpty(transferInformationVO.getAae382())) {
                    transferInformationVO.setAae382(null);
                    transferInformationVO.setAae273(null);
                    transferInformationVO.setAae381(null); // 记账金额
                    transferInformationVO.setAae264(null); // 记账金额中的个人缴费部分
                    transferInformationVO.setAae269(null); // 记账利息
                    transferInformationVO.setAae265(null); // 记账利息中的个人缴费部分
                }

                if (transferInformationVO.getAae001().intValue() < zydn - 1) {

                    //至本年末账户累计储存额没值或为0时
                    if (ValidateUtil.isEmpty(transferInformationVO.getAae382()) || transferInformationVO.getAae382().compareTo(BigDecimal.ZERO) == 0) {
                        transferInformationVO.setAae382(null);
                        transferInformationVO.setAae273(null);
                        if (ValidateUtil.isEmpty(transferInformationVO.getAae381()) || transferInformationVO.getAae381().compareTo(BigDecimal.ZERO) == 0) {
                            transferInformationVO.setAae381(null); // 记账金额
                            transferInformationVO.setAae264(null); // 记账金额中的个人缴费部分
                            transferInformationVO.setAae269(null); // 记账利息
                            transferInformationVO.setAae265(null); // 记账利息中的个人缴费部分
                        }

                    }
                }
            }
        }
        if ("62".equals("1")) {// 判断，除了退役军人，其他类型都不放大账户
            magnifyAccount_gs(informationVOS, zydn, transferPersonInfo.getAae206().intValue());
        } else {//放大账户
            magnifyAccount(informationVOS, zydn, transferPersonInfo.getAae206().intValue());
        }


        StandardVO standardVO1 = new StandardVO("aae001_zr", "Integer", "asc");
        StandardVO standardVO2 = new StandardVO("aae001_yw", "Integer", "asc");
        StandardVO standardVO3 = new StandardVO("aae041", "Integer", "asc");
        StandardVO standardVO4 = new StandardVO("aae202", "Integer", "desc");//存在补差数据月数为0  也需要排序


        List<MyMap> informationList = ListUtil.sorts(ListUtil.list2MyMapList(informationVOS), standardVO1, standardVO3, standardVO2, standardVO4);

        //转出特殊处理，同一年既有转入又有本地缴费明细，转出时当年全部标记成转入时间段
        Map ic91map;
        for (int i = 0; i < informationList.size(); i++) {
            ic91map = informationList.get(i);
            //2010年之前才有曾办理异地转入
            if (Integer.parseInt(ic91map.get("aae001").toString()) <= 2010) {
                if ("曾办理异地转入".contains(String.valueOf(ic91map.get("aae013"))) && ValidateUtil.isEmpty(ic91map.get("aae382"))) {
                    ic91map = informationList.get(i + 1);
                    if (!"曾办理异地转入".contains(String.valueOf(ic91map.get("aae013")))) {
                        if (ValidateUtil.isEmpty(ic91map.get("aae013"))) {
                            ic91map.put("aae013", "曾办理异地转入");
                        } else {
                            ic91map.put("aae013", ic91map.get("aae013") + ",曾办理异地转入");
                        }
                        // 20220625 避免信息表上传时部平台的校验金额，本地缴费的当年记账金额，当年记账金额的个人部分，当年记账利息，当年记账利息的个人部分置为空
                        ic91map.put("aae381", null);
                        ic91map.put("aae264", null);
                        ic91map.put("aae269", null);
                        ic91map.put("aae265", null);
                    }

                }
            }
        }

        List<Ic91Info> infoList = new ArrayList<>();
        Ic91Info ic91Info;
        index = 0;
        List<MyMap> tmsdetail = informationList.stream().filter(m -> Integer.parseInt(m.getAsString("aae001")) >= 2023).collect(Collectors.toList());//由于统模式以后，当年存在基数补差，且当年到账，按照原有的信息表规则，基数补差的明细是放在正常应缴的后一条，导致2023年结息金额虽然包含了基数补差，但是基数补差放在结息后一条，不符合了信息表规则整改
        informationList.removeAll(tmsdetail);

        StandardVO standardVO6 = new StandardVO("aae001", "Integer", "asc");
        StandardVO standardVO7 = new StandardVO("aae042", "Integer", "asc");
        StandardVO standardVO8 = new StandardVO("aae202", "Integer", "asc");
        ListUtil.sorts(tmsdetail, standardVO6, standardVO7, standardVO8);
        informationList.addAll(tmsdetail);
        for (MyMap myMap : informationList) {
            ic91Info = new Ic91Info(myMap);
            ic91Info.setAaz751(index);
            infoList.add(ic91Info);
            index++;
        }
        return infoList;

    }


    /**
     * 根据转入的信息表获取业务年度
     *
     * @param aae001GroupMap
     * @param hisList
     */
    @Override
    public void splitHisInfromatios(Map<String, List<MyMap>> aae001GroupMap, List<Map> hisList) {

        if (!ValidateUtil.isEmpty(hisList)) {
            StandardVO standardVO = new StandardVO("aae001", "Integer", "asc");
            StandardVO standardVO1 = new StandardVO("aae041", "Integer", "asc");
            StandardVO standardVO2 = new StandardVO("aae202", "Integer", "asc");//存在补差数据月数为0  也需要排序
            List<MyMap> myMapList = ListUtil.sorts(ListUtil.list2MyMapList(hisList), standardVO, standardVO1, standardVO2);

            Map<String, List<MyMap>> stringListMap = calculateBusinessYears(myMapList);

            if (!ValidateUtil.isEmpty(aae001GroupMap)) {
                List<MyMap> list;
                for (String aae001 : stringListMap.keySet()) {
                    list = aae001GroupMap.get(aae001);
                    if (!ValidateUtil.isEmpty(list)) {
                        list.addAll(stringListMap.get(aae001));
                    } else {
                        aae001GroupMap.put(aae001, stringListMap.get(aae001));
                    }
                }
            } else {
                aae001GroupMap.putAll(stringListMap);
            }

        }
    }

    private Map<String, List<MyMap>> calculateBusinessYears(List<MyMap> informationDetails) {

        Map<String, List<MyMap>> aae001GroupMap = new HashMap<>();
        List<MyMap> detailsList = new ArrayList<>();

        //转移往年且累计存储额大于0的数据
        List<MyMap> details = informationDetails;
        Integer nowAae001 = 0;
        Integer tmp_aae001 = 0;
        String firstAae042;

        boolean skipFlag = false;
        for (int i = 0; i < details.size(); i++) {
            detailsList.add(details.get(i));
            if (NumberUtil.nullDispose(details.get(i).getAsBigDecimal("aae382")).compareTo(BigDecimal.ZERO) > 0) {

                if (skipFlag) {
                    skipFlag = false;
                }

                if (tmp_aae001.intValue() == 0) {
                    tmp_aae001 = NumberUtil.nullDispose(details.get(i).getAsInteger("aae001"));
                    firstAae042 = details.get(i).getAsString("aae042");
                    if ("12".equals(firstAae042.substring(4, 6))) {
                        nowAae001 = tmp_aae001;
                    } else {
                        nowAae001 = tmp_aae001 - 1;
                    }
                }

                for (int j = i + 1; j < details.size(); j++) {
                    if (NumberUtil.nullDispose(details.get(j).getAsBigDecimal("aae382")).compareTo(BigDecimal.ZERO) > 0) {
                        if (nowAae001.intValue() + 1 > details.get(j).getAsInteger("aae001").intValue()) {
                            skipFlag = true;
                        }
                        break;
                    }
                }


                if (!skipFlag) {
                    aae001GroupMap.put(nowAae001.toString(), detailsList);
                    nowAae001 = nowAae001 + 1;
                    detailsList = new ArrayList<>();
                }

            }

        }
        return aae001GroupMap;
    }


    /**
     * 设置转入记录的业务年度
     *
     * @param myMap
     * @param aae001GroupMap
     */
    private void setTransferBusinessYear(MyMap myMap, Map<String, List<MyMap>> aae001GroupMap) {

        Integer aae003 = myMap.getAsInteger("aae003");
        List<MyMap> histroyList;
        String tmp_aae001 = "";
        boolean flag;
        for (String aae001 : aae001GroupMap.keySet()) {

            flag = false;
            histroyList = aae001GroupMap.get(aae001);
            if (ValidateUtil.isNotEmpty(histroyList)) {

                for (Map hisMap : histroyList) {
                    if (aae003 >= Integer.valueOf(hisMap.get("aae041").toString())
                            && aae003 <= Integer.valueOf(hisMap.get("aae042").toString())) {
                        if (ValidateUtil.isEmpty(tmp_aae001)) {
                            tmp_aae001 = aae001;
                        }
                        if (hisMap.get("aab301").toString().equals(myMap.getAsString("aab301"))) {
                            myMap.put("aae001", aae001);
                            if (ValidateUtil.isEmpty(myMap.get("aab299"))) {
                                myMap.put("aab299", hisMap.get("aab299"));
                            }
                            flag = true;
                            break;
                        }
                    }

                }
            }
            if (flag) {
                break;
            }
        }
        if (ValidateUtil.isEmpty(myMap.getAsString("aae001"))) {
            if (ValidateUtil.isEmpty(tmp_aae001)) {
                myMap.put("aae001", myMap.getAsString("aab191").substring(0, 4));
            } else {
                myMap.put("aae001", tmp_aae001);
            }
        }
    }

    /**
     * 放大账户(放大部分不计利息)
     *
     * @param informationVOS
     */
    private void magnifyAccount(List<Ic91Info> informationVOS, int zydn, int aae206) {

        // 处理本地综合保险1998-2005之间不足11%的数据
        List<Map> tzList = new ArrayList<>();
        for (Ic91Info informationVO : informationVOS) {
            // 开始期号
            Integer aae041 = informationVO.getAae041().intValue();
            // 截止期号
            Integer aae042 = informationVO.getAae042().intValue();
            // 个人缴费比例
            BigDecimal aaa041 = informationVO.getAaa041();
            if (ValidateUtil.isEmpty(aaa041)) {
                aaa041 = BigDecimal.ZERO;
            }
            //单位缴费比例
            BigDecimal aaa042 = informationVO.getAaa042();
            // 单位缴费划入账户比例
            BigDecimal aaa043 = informationVO.getAaa043();
            if (ValidateUtil.isEmpty(aaa043)) {
                aaa043 = BigDecimal.ZERO;
            }
            // 缴费基数
            BigDecimal aae180 = informationVO.getAae180();
            if (ValidateUtil.isEmpty(aae180)) {
                aae180 = BigDecimal.ZERO;
            }
            // 缴费月数
            BigDecimal month = new BigDecimal((DateUtil.getBetweenCountIssue(aae041, aae042)) + "");
            if (aae041 >= 199801 && aae042 <= 200512 && (informationVO.getAae202().intValue() > 0 || aae180.compareTo(BigDecimal.ZERO) > 0)
                    && String.valueOf(informationVO.getAae013()).indexOf("曾办理异地转入") == -1 && aae041 >= aae206) {
                if (aaa041.add(aaa043).compareTo(new BigDecimal("0.11")) < 0) {
                    BigDecimal tzbl = new BigDecimal("0.11").subtract(aaa041).subtract(aaa043); // 调整比例
                    BigDecimal tzje = BigDecimalUtil.moneyPrecision(aae180.multiply(month).multiply(tzbl).setScale(2, BigDecimal.ROUND_HALF_UP), 1, true); // 调整金额
                    informationVO.setAaa043(aaa043.add(tzbl)); // 重置单位划账户比例
                    //避免单位划账户比例大于单位缴费比例，重置单位划账户比例同时重置单位缴费比例
                    informationVO.setAaa042(aaa042.add(tzbl));
                    // 记录调整账户金额
                    if (informationVO.getAae001().intValue() < zydn) { // 小于转移当年
                        // 添加调整记录
                        Map tzMap = new HashMap();
                        tzMap.put("aae001", informationVO.getAae001()); // 记录
                        tzMap.put("tzje", tzje); // 调整金额
                        tzMap.put("aae041", informationVO.getAae041().intValue());
                        tzMap.put("aae042", informationVO.getAae042().intValue());
                        //tzMap.put("cae089", informationVO.getCae089()); // 调整序号
                        tzList.add(tzMap);
                    } else { // 转移当年
                        //if (ValidateUtil.isEmpty(informationVO.getAae264())) {
                        //	informationVO.setAae264(BigDecimal.ZERO.add(tzje)); // 本年个人缴费部分划入个人账户本金
                        //} else {
                        //	informationVO.setAae264(informationVO.getAae264().add(tzje)); // 本年个人缴费部分划入个人账户本金
                        //}
                        if (ValidateUtil.isEmpty(informationVO.getAae381())) {
                            informationVO.setAae381(BigDecimal.ZERO.add(tzje)); // 当年记账金额小计
                        } else {
                            informationVO.setAae381(informationVO.getAae381().add(tzje)); // 当年记账金额小计
                        }
                    }
                }
            }
        }
        // 处理调整账户信息
        if (ValidateUtil.isNotEmpty(tzList)) {
            for (Map map : tzList) {
                Integer aae001 = Integer.valueOf(map.get("aae001").toString()); // 年度
                BigDecimal tzje = (BigDecimal) map.get("tzje"); // 调整金额
                Integer aae041 = (Integer) map.get("aae041"); // 序号
                Integer aae042 = (Integer) map.get("aae042"); // 序号
                for (Ic91Info informationVO : informationVOS) {
                    if (informationVO.getAae001().intValue() >= aae001.intValue() && // 大于等于当前年度
                            informationVO.getAae001().intValue() < zydn && // 小于转移当年
                            /* informationVO.getCae089().intValue() >= cae089.intValue() &&*/ // 大于或者等于调整序号的
                            !ValidateUtil.isEmpty(informationVO.getAae382())) { // 不为空

                        if (informationVO.getAae001().intValue() == aae001.intValue()
                                && informationVO.getAae041().intValue() == aae041
                                && informationVO.getAae041().intValue() == aae042) {
                            if (ValidateUtil.isEmpty(informationVO.getAae013())) {
                                informationVO.setAae013("按规定账户规模调整");
                            }
                        }

                        if (informationVO.getAae001().intValue() == aae001.intValue()) { // 调整当年
                            if (String.valueOf(informationVO.getAae013()).indexOf("曾办理异地转入") == -1) { // 不为曾办理异地转入需要累加本金以及累计存储额
                                //if (ValidateUtil.isEmpty(informationVO.getAae264())) {
                                //	informationVO.setAae264(BigDecimal.ZERO.add(tzje)); // 本年个人缴费部分划入个人账户本金
                                //} else {
                                //	informationVO.setAae264(informationVO.getAae264().add(tzje)); // 本年个人缴费部分划入个人账户本金
                                //}
                                if (ValidateUtil.isEmpty(informationVO.getAae381())) {
                                    informationVO.setAae381(BigDecimal.ZERO.add(tzje)); // 当年记账金额小计
                                } else {
                                    informationVO.setAae381(informationVO.getAae381().add(tzje)); // 当年记账金额小计
                                }
                                //if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                //    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                //} else {
                                //    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                //}
                                if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                    informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                                } else {
                                    informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                                }
                            } else { // 曾办理异地转入，只累加累计存储额不累加本金
                                //if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                //    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                //} else {
                                //    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                //}
                                if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                    informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                                } else {
                                    informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                                }
                            }
                        } else { // 大于当年的
                            //if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                            //    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                            //} else {
                            //    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                            //}
                            if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                            } else {
                                informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                            }
                        }
                    }
                }
            }
        }

        // 处理2005年之后个人账户金额不足8%的调账信息 yanglong 20180228
        List<Map> tzList_8 = new ArrayList<>();
        for (Ic91Info informationVO : informationVOS) {
            // 开始期号
            Integer aae041 = informationVO.getAae041().intValue();
            // 截止期号
            Integer aae042 = informationVO.getAae042().intValue();
            // 个人缴费比例
            BigDecimal aaa041 = informationVO.getAaa041();
            if (ValidateUtil.isEmpty(aaa041)) {
                aaa041 = BigDecimal.ZERO;
            }
            // 单位缴费划入账户比例
           /* BigDecimal aaa043 = informationVO.getAaa043();
            if (ValidateUtil.isEmpty(aaa043)) {
//                aaa043 = BigDecimal.ZERO;g
            }*/
            // 缴费基数
            BigDecimal aae180 = informationVO.getAae180();
            if (ValidateUtil.isEmpty(aae180)) {
                aae180 = BigDecimal.ZERO;
            }
            // 缴费月数
            BigDecimal month = new BigDecimal((DateUtil.getBetweenCountIssue(aae041, aae042)) + "");
            if (aae041 >= 200601 && // 开始期号
                    (informationVO.getAae202().intValue() > 0 || aae180.compareTo(BigDecimal.ZERO) > 0) && // 月数大于0或者缴费基数大于0
                    String.valueOf(informationVO.getAae013()).indexOf("曾办理异地转入") == -1 && aae041 >= aae206) { // 排除异地转入
                if (aaa041.compareTo(new BigDecimal("0.08")) < 0) {
                    BigDecimal tzbl = new BigDecimal("0.08").subtract(aaa041); // 调整比例
                    BigDecimal tzje = BigDecimalUtil.moneyPrecision(aae180.multiply(month).multiply(tzbl).setScale(2, BigDecimal.ROUND_HALF_UP), 1, true); // 调整金额
                    informationVO.setAaa041(aaa041.add(tzbl)); // 重置个人缴费比例
                    // 记录调整账户金额
                    if (informationVO.getAae001().intValue() < zydn) { // 小于转移当年
                        // 添加调整记录
                        Map tzMap = new HashMap();
                        tzMap.put("aae001", informationVO.getAae001()); // 记录
                        tzMap.put("tzje", tzje); // 调整金额
                        tzMap.put("aae041", informationVO.getAae041().intValue());
                        tzMap.put("aae042", informationVO.getAae042().intValue());
                        tzList_8.add(tzMap);
                    } else { // 转移当年

                        if (ValidateUtil.isEmpty(informationVO.getAae264())) {
                            informationVO.setAae264(BigDecimal.ZERO.add(tzje)); // 本年个人缴费部分划入个人账户本金
                        } else {
                            informationVO.setAae264(informationVO.getAae264().add(tzje)); // 本年个人缴费部分划入个人账户本金
                        }
                        if (ValidateUtil.isEmpty(informationVO.getAae381())) {
                            informationVO.setAae381(BigDecimal.ZERO.add(tzje)); // 当年记账金额小计
                        } else {
                            informationVO.setAae381(informationVO.getAae381().add(tzje)); // 当年记账金额小计
                        }
                    }
                }
            }
        }

        // 处理调整账户信息
        if (ValidateUtil.isNotEmpty(tzList_8)) {
            for (Map map : tzList_8) {
                Integer aae001 = Integer.valueOf(map.get("aae001").toString()); // 年度
                BigDecimal tzje = (BigDecimal) map.get("tzje"); // 调整金额
                //Integer cae089 = (Integer) map.get("cae089"); // 序号
                Integer aae041 = (Integer) map.get("aae041"); // 序号
                Integer aae042 = (Integer) map.get("aae042"); // 序号
                for (Ic91Info informationVO : informationVOS) {
                    if (informationVO.getAae001().intValue() >= aae001.intValue() && // 大于等于当前年度
                            informationVO.getAae001().intValue() < zydn && // 小于转移当年
                            //informationVO.getCae089().intValue() >= cae089.intValue() && // 大于或者等于调整序号的
                            !ValidateUtil.isEmpty(informationVO.getAae382())) { // 不为空


                        if (informationVO.getAae001().intValue() == aae001.intValue()
                                && informationVO.getAae041().intValue() == aae041.intValue()
                                && informationVO.getAae042().intValue() == aae042.intValue()
                        ) {
                            if (ValidateUtil.isEmpty(informationVO.getAae013())) {
                                informationVO.setAae013("按规定账户规模调整");
                            }
                        }

                        if (informationVO.getAae001().intValue() == aae001.intValue()) { // 调整当年
                            if (String.valueOf(informationVO.getAae013()).indexOf("曾办理异地转入") == -1) { // 不为曾办理异地转入需要累加本金以及累计存储额
                                if (ValidateUtil.isEmpty(informationVO.getAae264())) {
                                    informationVO.setAae264(BigDecimal.ZERO.add(tzje)); // 本年个人缴费部分划入个人账户本金
                                } else {
                                    informationVO.setAae264(informationVO.getAae264().add(tzje)); // 本年个人缴费部分划入个人账户本金
                                }
                                if (ValidateUtil.isEmpty(informationVO.getAae381())) {
                                    informationVO.setAae381(BigDecimal.ZERO.add(tzje)); // 当年记账金额小计
                                } else {
                                    informationVO.setAae381(informationVO.getAae381().add(tzje)); // 当年记账金额小计
                                }
                                if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                } else {
                                    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                }
                                if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                    informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                                } else {
                                    informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                                }
                            } else { // 曾办理异地转入，只累加累计存储额不累加本金
                                if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                } else {
                                    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                }
                                if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                    informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                                } else {
                                    informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                                }
                            }
                        } else { // 大于当年的
                            if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                            } else {
                                informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                            }
                            if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                            } else {
                                informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * 放大账户(放大部分不计利息)
     *
     * @param informationVOS
     */
    private void magnifyAccount_gs(List<Ic91Info> informationVOS, int zydn, int aae206) {

        // 处理本地综合保险1998-2005之间不足11%的数据
        List<Map> tzList = new ArrayList<Map>();
        for (Ic91Info informationVO : informationVOS) {
            if ("退役军人".equals(informationVO.getAae013())) {
                // 开始期号
                Integer aae041 = informationVO.getAae041().intValue();
                // 截止期号
                Integer aae042 = informationVO.getAae042().intValue();
                // 个人缴费比例
                BigDecimal aaa041 = informationVO.getAaa041();
                if (ValidateUtil.isEmpty(aaa041)) {
                    aaa041 = BigDecimal.ZERO;
                }
                //单位缴费比例
                BigDecimal aaa042 = informationVO.getAaa042();
                // 单位缴费划入账户比例
                BigDecimal aaa043 = informationVO.getAaa043();
                if (ValidateUtil.isEmpty(aaa043)) {
                    aaa043 = BigDecimal.ZERO;
                }
                // 缴费基数
                BigDecimal aae180 = informationVO.getAae180();
                if (ValidateUtil.isEmpty(aae180)) {
                    aae180 = BigDecimal.ZERO;
                }
                // 缴费月数
                BigDecimal month = new BigDecimal((DateUtil.getBetweenCountIssue(aae041, aae042)) + "");
                if (aae041 >= 199801 && aae042 <= 200512 && (informationVO.getAae202().intValue() > 0 || aae180.compareTo(BigDecimal.ZERO) > 0)
                        && String.valueOf(informationVO.getAae013()).indexOf("曾办理异地转入") == -1 && aae041 >= aae206) {
                    if (aaa041.add(aaa043).compareTo(new BigDecimal("0.11")) < 0) {
                        BigDecimal tzbl = new BigDecimal("0.11").subtract(aaa041).subtract(aaa043); // 调整比例
                        BigDecimal tzje = BigDecimalUtil.moneyPrecision(aae180.multiply(month).multiply(tzbl).setScale(2, BigDecimal.ROUND_HALF_UP), 1, true); // 调整金额
                        informationVO.setAaa043(aaa043.add(tzbl)); // 重置单位划账户比例
                        //避免单位划账户比例大于单位缴费比例，重置单位划账户比例同时重置单位缴费比例
                        informationVO.setAaa042(aaa042.add(tzbl));
                        // 记录调整账户金额
                        if (informationVO.getAae001().intValue() < zydn) { // 小于转移当年
                            // 添加调整记录
                            Map tzMap = new HashMap();
                            tzMap.put("aae001", informationVO.getAae001()); // 记录
                            tzMap.put("tzje", tzje); // 调整金额
                            tzMap.put("aae041", informationVO.getAae041().intValue());
                            tzMap.put("aae042", informationVO.getAae042().intValue());
                            //tzMap.put("cae089", informationVO.getCae089()); // 调整序号
                            tzList.add(tzMap);
                        } else { // 转移当年
                            //if (ValidateUtil.isEmpty(informationVO.getAae264())) {
                            //	informationVO.setAae264(BigDecimal.ZERO.add(tzje)); // 本年个人缴费部分划入个人账户本金
                            //} else {
                            //	informationVO.setAae264(informationVO.getAae264().add(tzje)); // 本年个人缴费部分划入个人账户本金
                            //}
                            if (ValidateUtil.isEmpty(informationVO.getAae381())) {
                                informationVO.setAae381(BigDecimal.ZERO.add(tzje)); // 当年记账金额小计
                            } else {
                                informationVO.setAae381(informationVO.getAae381().add(tzje)); // 当年记账金额小计
                            }
                        }
                    }
                }
            }
        }
        // 处理调整账户信息
        if (ValidateUtil.isNotEmpty(tzList)) {
            for (Map map : tzList) {
                Integer aae001 = Integer.valueOf(map.get("aae001").toString()); // 年度
                BigDecimal tzje = (BigDecimal) map.get("tzje"); // 调整金额
                Integer aae041 = (Integer) map.get("aae041"); // 序号
                Integer aae042 = (Integer) map.get("aae042"); // 序号
                for (Ic91Info informationVO : informationVOS) {
                    if (informationVO.getAae001().intValue() >= aae001.intValue() && // 大于等于当前年度
                            informationVO.getAae001().intValue() < zydn && // 小于转移当年
                            /* informationVO.getCae089().intValue() >= cae089.intValue() &&*/ // 大于或者等于调整序号的
                            !ValidateUtil.isEmpty(informationVO.getAae382())) { // 不为空

                        if (informationVO.getAae001().intValue() == aae001.intValue()
                                && informationVO.getAae041().intValue() == aae041.intValue()
                                && informationVO.getAae041().intValue() == aae042.intValue()) {
                            if (ValidateUtil.isEmpty(informationVO.getAae013())) {
                                informationVO.setAae013("按规定账户规模调整");
                            }
                        }

                        if (informationVO.getAae001().intValue() == aae001.intValue()) { // 调整当年
                            if (String.valueOf(informationVO.getAae013()).indexOf("曾办理异地转入") == -1) { // 不为曾办理异地转入需要累加本金以及累计存储额
                                //if (ValidateUtil.isEmpty(informationVO.getAae264())) {
                                //	informationVO.setAae264(BigDecimal.ZERO.add(tzje)); // 本年个人缴费部分划入个人账户本金
                                //} else {
                                //	informationVO.setAae264(informationVO.getAae264().add(tzje)); // 本年个人缴费部分划入个人账户本金
                                //}
                                if (ValidateUtil.isEmpty(informationVO.getAae381())) {
                                    informationVO.setAae381(BigDecimal.ZERO.add(tzje)); // 当年记账金额小计
                                } else {
                                    informationVO.setAae381(informationVO.getAae381().add(tzje)); // 当年记账金额小计
                                }
                                //if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                //    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                //} else {
                                //    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                //}
                                if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                    informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                                } else {
                                    informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                                }
                            } else { // 曾办理异地转入，只累加累计存储额不累加本金
                                //if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                //    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                //} else {
                                //    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                //}
                                if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                    informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                                } else {
                                    informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                                }
                            }
                        } else { // 大于当年的
                            //if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                            //    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                            //} else {
                            //    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                            //}
                            if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                            } else {
                                informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                            }
                        }
                    }
                }
            }
        }

        // 处理2005年之后个人账户金额不足8%的调账信息 yanglong 20180228
        List<Map> tzList_8 = new ArrayList<Map>();
        for (Ic91Info informationVO : informationVOS) {
            // 开始期号
            Integer aae041 = informationVO.getAae041().intValue();
            // 截止期号
            Integer aae042 = informationVO.getAae042().intValue();
            // 个人缴费比例
            BigDecimal aaa041 = informationVO.getAaa041();
            if (ValidateUtil.isEmpty(aaa041)) {
                aaa041 = BigDecimal.ZERO;
            }
            // 单位缴费划入账户比例
           /* BigDecimal aaa043 = informationVO.getAaa043();
            if (ValidateUtil.isEmpty(aaa043)) {
//                aaa043 = BigDecimal.ZERO;g
            }*/
            // 缴费基数
            BigDecimal aae180 = informationVO.getAae180();
            if (ValidateUtil.isEmpty(aae180)) {
                aae180 = BigDecimal.ZERO;
            }
            // 缴费月数
            BigDecimal month = new BigDecimal((DateUtil.getBetweenCountIssue(aae041, aae042)) + "");
            if (aae041 >= 200601 && // 开始期号
                    (informationVO.getAae202().intValue() > 0 || aae180.compareTo(BigDecimal.ZERO) > 0) && // 月数大于0或者缴费基数大于0
                    String.valueOf(informationVO.getAae013()).indexOf("曾办理异地转入") == -1 && aae041 >= aae206) { // 排除异地转入
                if (aaa041.compareTo(new BigDecimal("0.08")) < 0) {
                    BigDecimal tzbl = new BigDecimal("0.08").subtract(aaa041); // 调整比例
                    BigDecimal tzje = BigDecimalUtil.moneyPrecision(aae180.multiply(month).multiply(tzbl).setScale(2, BigDecimal.ROUND_HALF_UP), 1, true); // 调整金额
                    informationVO.setAaa041(aaa041.add(tzbl)); // 重置个人缴费比例
                    // 记录调整账户金额
                    if (informationVO.getAae001().intValue() < zydn) { // 小于转移当年
                        // 添加调整记录
                        Map tzMap = new HashMap();
                        tzMap.put("aae001", informationVO.getAae001()); // 记录
                        tzMap.put("tzje", tzje); // 调整金额
                        tzMap.put("aae041", informationVO.getAae041().intValue());
                        tzMap.put("aae042", informationVO.getAae042().intValue());
                        tzList_8.add(tzMap);
                    } else { // 转移当年

                        if (ValidateUtil.isEmpty(informationVO.getAae264())) {
                            informationVO.setAae264(BigDecimal.ZERO.add(tzje)); // 本年个人缴费部分划入个人账户本金
                        } else {
                            informationVO.setAae264(informationVO.getAae264().add(tzje)); // 本年个人缴费部分划入个人账户本金
                        }
                        if (ValidateUtil.isEmpty(informationVO.getAae381())) {
                            informationVO.setAae381(BigDecimal.ZERO.add(tzje)); // 当年记账金额小计
                        } else {
                            informationVO.setAae381(informationVO.getAae381().add(tzje)); // 当年记账金额小计
                        }
                    }
                }
            }
        }

        // 处理调整账户信息
        if (ValidateUtil.isNotEmpty(tzList_8)) {
            for (Map map : tzList_8) {
                Integer aae001 = Integer.valueOf(map.get("aae001").toString()); // 年度
                BigDecimal tzje = (BigDecimal) map.get("tzje"); // 调整金额
                //Integer cae089 = (Integer) map.get("cae089"); // 序号
                Integer aae041 = (Integer) map.get("aae041"); // 序号
                Integer aae042 = (Integer) map.get("aae042"); // 序号
                for (Ic91Info informationVO : informationVOS) {
                    if (informationVO.getAae001().intValue() >= aae001.intValue() && // 大于等于当前年度
                            informationVO.getAae001().intValue() < zydn && // 小于转移当年
                            //informationVO.getCae089().intValue() >= cae089.intValue() && // 大于或者等于调整序号的
                            !ValidateUtil.isEmpty(informationVO.getAae382())) { // 不为空


                        if (informationVO.getAae001().intValue() == aae001.intValue()
                                && informationVO.getAae041().intValue() == aae041.intValue()
                                && informationVO.getAae042().intValue() == aae042.intValue()
                        ) {
                            if (ValidateUtil.isEmpty(informationVO.getAae013())) {
                                informationVO.setAae013("按规定账户规模调整");
                            }
                        }

                        if (informationVO.getAae001().intValue() == aae001.intValue()) { // 调整当年
                            if (String.valueOf(informationVO.getAae013()).indexOf("曾办理异地转入") == -1) { // 不为曾办理异地转入需要累加本金以及累计存储额
                                if (ValidateUtil.isEmpty(informationVO.getAae264())) {
                                    informationVO.setAae264(BigDecimal.ZERO.add(tzje)); // 本年个人缴费部分划入个人账户本金
                                } else {
                                    informationVO.setAae264(informationVO.getAae264().add(tzje)); // 本年个人缴费部分划入个人账户本金
                                }
                                if (ValidateUtil.isEmpty(informationVO.getAae381())) {
                                    informationVO.setAae381(BigDecimal.ZERO.add(tzje)); // 当年记账金额小计
                                } else {
                                    informationVO.setAae381(informationVO.getAae381().add(tzje)); // 当年记账金额小计
                                }
                                if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                } else {
                                    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                }
                                if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                    informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                                } else {
                                    informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                                }
                            } else { // 曾办理异地转入，只累加累计存储额不累加本金
                                if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                    informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                } else {
                                    informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                                }
                                if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                    informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                                } else {
                                    informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                                }
                            }
                        } else { // 大于当年的
                            if (ValidateUtil.isEmpty(informationVO.getAae273())) {
                                informationVO.setAae273(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                            } else {
                                informationVO.setAae273(informationVO.getAae273().add(tzje)); // 至本年末账户累计储存额中的个人缴费部分
                            }
                            if (ValidateUtil.isEmpty(informationVO.getAae382())) {
                                informationVO.setAae382(BigDecimal.ZERO.add(tzje)); // 至本年末账户累计储存额
                            } else {
                                informationVO.setAae382(informationVO.getAae382().add(tzje)); //至本年末账户累计储存额
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * 生成信息表基本信息
     *
     * @param informationVOS
     * @return
     */
    @Override
    public Ic90Info createTransferFund(List<Ic91Info> informationVOS, List<MyMap> ac08s, TransferPersonInfo transferPersonInfo) {

        // 转移年度
        Integer zynd = DateUtil.getYear(DateUtil.getCurrentTime());
        //转移上年
        Integer zysnd = zynd - 1;
        //建立账户年月
        int aac032 = transferPersonInfo.getAae206().intValue();

        //根据转移信息明细信息获取转出基金信息
        if (ValidateUtil.isEmpty(informationVOS)) {
            throw new IllegalArgumentException("未获取到生成的转移信息表明细信息");
        }
        if (Constant.AAE140_110_QYZGJBYLBX.equals(transferPersonInfo.getAae140())) {
            if (ValidateUtil.isEmpty(transferPersonInfo.getAae473())) {
                throw new IllegalArgumentException("未获取到账户类别,请先做人员信息变更");
            }
        } else {
            transferPersonInfo.setAae473(Constant.AAE473_1_YBZH);
        }

        //98年前单位划入账户金额合计
        BigDecimal before_1998_dw = BigDecimal.ZERO;
        //98年后补缴98年前单位划入账户金额合计
        BigDecimal after_1998_dw = BigDecimal.ZERO;
        //98年前个人划入账户金额合计
        BigDecimal before_1998_gr = BigDecimal.ZERO;
        //98年后个人划入账户金额合计
        BigDecimal after_1998_gr = BigDecimal.ZERO;
        //调转上年累计存储额
        BigDecimal tzsnzje = BigDecimal.ZERO;
        //调转当年本金合计
        BigDecimal tzdnbj = BigDecimal.ZERO;
        //统筹金额
        BigDecimal tcje = BigDecimal.ZERO;
        Integer tmp_aae001;
        Integer tmp_aae041;
        BigDecimal tmp_aae180;//基数
        BigDecimal tmp_aaa042;//比例
        Ic91Info informationVO;
        for (InformationDetailInfo informationDetailInfo : informationVOS) {
            informationVO = (Ic91Info) informationDetailInfo;
            tmp_aae001 = informationVO.getAae001().intValue();
            tmp_aae041 = informationVO.getAae041().intValue();


                /*  计算公式：
            自然年度处理 98年前个人部分取97年12月结息的金额，单位部分也是取97年12月
            98年前个人部分 =至本年末账户累计储存额中的个人缴费部分
            98年前单位部分 =至本年末账户累计储存额；
             */
            if (1997 == tmp_aae001.intValue() && !ValidateUtil.isEmpty(informationVO.getAae273())) {//自然年度处理 98年前个人部分取97年12月结息的金额，单位部分也是取97年12月
                if (!"曾办理异地转入".equals(informationVO.getAae013()) && !"定额缴费".equals(informationVO.getAae013()) && !ValidateUtil.isEmpty(informationVO.getAae180())) {
                    after_1998_gr = ValidateUtil.isEmpty(informationVO.getAae273()) ? after_1998_gr : informationVO.getAae273();
                    after_1998_dw = ValidateUtil.isEmpty(informationVO.getAae382()) ? after_1998_gr : informationVO.getAae382();

                }
            }


            /*  计算公式：
            业务年度(不是98年12月结息)
            98年前个人部分 =至本年末账户累计储存额中的个人缴费部分（aae273）-98年的金额（基数*月数*（个人缴费比例））-（当年记账利息中的个人缴费部分/12*（月数））
            98年前单位部分 =至本年末账户累计储存额（aae382）-98年的金额（基数*月数*（个人缴费比例+单位缴费划入个人账户比例））-（当年记账利息/12*（月数））
             */
            if (1998 == tmp_aae001.intValue() && !ValidateUtil.isEmpty(informationVO.getAae273()) && informationVO.getAae042().intValue() != 199812) {//业务年度(不是98年12月结息)
                if (!"曾办理异地转入".equals(informationVO.getAae013()) && !"定额缴费".equals(informationVO.getAae013())) {
                    BigDecimal aae202 = informationVO.getAae042().subtract(informationVO.getAae041()).add(BigDecimal.ONE); //月数
                    BigDecimal aaa043 = ValidateUtil.isEmpty(informationVO.getAaa043()) ? BigDecimal.ZERO : informationVO.getAaa043();//单位缴费划入个人账户比例
                    BigDecimal aaa041 = ValidateUtil.isEmpty(informationVO.getAaa041()) ? BigDecimal.ZERO : informationVO.getAaa041();//个人缴费比例
                    BigDecimal aae269 = ValidateUtil.isEmpty(informationVO.getAae269()) ? BigDecimal.ZERO : informationVO.getAae269();//当年记账利息
                    BigDecimal aae265 = ValidateUtil.isEmpty(informationVO.getAae265()) ? BigDecimal.ZERO : informationVO.getAae265();//当年记账利息中的个人缴费部分
                    BigDecimal gr_1998 = aae202.multiply(informationVO.getAae180()).multiply(aaa041);//98年个人结息的业务年度金额
                    BigDecimal dw_1998 = aae202.multiply(informationVO.getAae180()).multiply(aaa041.add(aaa043));//98年单位结息的业务年度金额


                    /*☆☆☆☆☆☆☆如果结息年度没有基数，就不扣减利息 ☆☆☆☆☆☆☆   目前 只扣减当年利息，历年利息不做处理
                    eg: 结息年度 199803-199803 基数0 说明没有缴费，按照公式会多减一个月利息，不合理
                    */
                    aae202 = informationVO.getAae180().compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : aae202;
                    after_1998_gr = informationVO.getAae273().subtract(gr_1998).subtract(aae265.divide(new BigDecimal(12), 2, BigDecimal.ROUND_HALF_UP).multiply(aae202));
                    after_1998_dw = informationVO.getAae382().subtract(dw_1998).subtract(aae269.divide(new BigDecimal(12), 2, BigDecimal.ROUND_HALF_UP).multiply(aae202));

                }
            }



        /*    //扣除因未业务年度结转导致的98年前单位划账户金额没扣减掉（例如：199703结转，199704-199712 没有扣减）
            if (1997 == tmp_aae001.intValue() && informationVO.getAae042().intValue() < 199801) {
                if (!"曾办理异地转入".equals(informationVO.getAae013()) && !"定额缴费".equals(informationVO.getAae013()) && !ValidateUtil.isEmpty(informationVO.getAaa043()) && !ValidateUtil.isEmpty(informationVO.getAae180())) {
                    after_1998_dw = after_1998_dw.add(informationVO.getAae042().subtract(informationVO.getAae041()).add(BigDecimal.ONE).multiply(informationVO.getAae180()).multiply(informationVO.getAaa043()));

                }
            }
            if (1997 == tmp_aae001.intValue() && informationVO.getAae042().intValue() == 199712 && ValidateUtil.isEmpty(informationVO.getAae273())) { //1997年12月没有结息的，就是存在业务年度的
                if (!"曾办理异地转入".equals(informationVO.getAae013()) && !"定额缴费".equals(informationVO.getAae013()) && !ValidateUtil.isEmpty(informationVO.getAaa043()) && !ValidateUtil.isEmpty(informationVO.getAae180())) {
                    after_1998_gr = after_1998_gr.add(new BigDecimal(199712).subtract(informationVO.getAae041()).add(BigDecimal.ONE).multiply(informationVO.getAae180()).multiply(informationVO.getAaa041()));

                }
            }

            //tmp_aae042 = informationVO.getAae042();
            //1.98年前单位划入账户金额合计-规则。年度为1997并且结束年月为199712
            if (1997 == tmp_aae001.intValue() && !ValidateUtil.isEmpty(informationVO.getAae382())) {//以12月为结转,取97年台帐即可,针对转移记录业务年度的,取1997年度的台帐

                before_1998_dw = before_1998_dw.compareTo(informationVO.getAae382().subtract(informationVO.getAae273())) > 0 ? before_1998_dw : informationVO.getAae382().subtract(informationVO.getAae273()); //97年存在自然年度业务年度结转问题，当年记账金额取最大的那一条
                after_1998_dw = BigDecimal.ZERO;
            }


            //扣除98年后补缴98年前记录单位划账户部分(建账后)a
            if (informationVO.getAae042().intValue() < 199801 && informationVO.getAae001().intValue() >= 1998 && informationVO.getAae041().intValue() >= aac032) {
                if (!"曾办理异地转入".equals(informationVO.getAae013()) && !"定额缴费".equals(informationVO.getAae013()) && !ValidateUtil.isEmpty(informationVO.getAaa043()) && !ValidateUtil.isEmpty(informationVO.getAae180())) {
                    after_1998_dw = after_1998_dw.add(informationVO.getAae042().subtract(informationVO.getAae041()).add(BigDecimal.ONE).multiply(informationVO.getAae180()).multiply(informationVO.getAaa043()));
                }
            }


            //2.98年前个人划入账户金额合计-规则。年度为1997并且结束年月为199712
            if (1997 == tmp_aae001.intValue() && !ValidateUtil.isEmpty(informationVO.getAae273())) {//以12月为结转,取97年台帐即可,针对转移记录业务年度的,取1997年度的台帐
                before_1998_gr = before_1998_gr.compareTo(informationVO.getAae273()) > 0 ? before_1998_gr : informationVO.getAae273();
            }
*/


            //3.调转上年累计存储额
            if (zysnd.intValue() == tmp_aae001.intValue() && !ValidateUtil.isEmpty(informationVO.getAae382())) {//取转移上年的台帐
                tzsnzje = informationVO.getAae382();
            }
            //4.调转当年本金合计，对应年度为转移当年
            if (zynd.intValue() == tmp_aae001.intValue() || zynd.intValue() == tmp_aae001 / 100) {
                //如果调转当年补缴了98年前的缴费，则需要去除单位划账户部分，此处只计算个人划账户部分
                if (!ValidateUtil.isEmpty(informationVO.getAae042()) && informationVO.getAae042().toString().length() == 6 && informationVO.getAae042().intValue() <= 199712) {
                    BigDecimal aae264_before98 = ValidateUtil.isEmpty(informationVO.getAae264()) ? BigDecimal.ZERO : informationVO.getAae264();
                    BigDecimal aae265_before98 = ValidateUtil.isEmpty(informationVO.getAae265()) ? BigDecimal.ZERO : informationVO.getAae265();
                    tzdnbj = tzdnbj.add(aae264_before98).add(aae265_before98);
                } else {
                    //tzdnbj = tzdnbj.add(informationVO.getAae381());
                    tzdnbj = tzdnbj.add(ValidateUtil.isEmpty(informationVO.getAae381()) ? BigDecimal.ZERO : informationVO.getAae381());
                    //20191113 调转当年补缴利息要转
                    tzdnbj = tzdnbj.add(ValidateUtil.isEmpty(informationVO.getAae269()) ? BigDecimal.ZERO : informationVO.getAae269());
                }
            }
            //5.统筹金额
            tmp_aae180 = BigDecimal.ZERO;
            tmp_aaa042 = new BigDecimal("0.12");
            if (tmp_aae041.intValue() >= 199801 && !ValidateUtil.isEmpty(informationVO.getAae180()) && informationVO.getAae180().compareTo(BigDecimal.ZERO) != 0) {
                tmp_aae180 = informationVO.getAae180().multiply(new BigDecimal(DateUtil.getBetweenCountIssue(informationVO.getAae041().intValue(), informationVO.getAae042().intValue())));
            }
            if (Constant.AAE473_2_LSJFZH.equals(transferPersonInfo.getAae473())) {
                if (tmp_aae041.intValue() >= 201001) {//临时账户2010年后的缴费按临时账户转移
                    BigDecimal aaa042 = ValidateUtil.isEmpty(informationVO.getAaa042()) ? BigDecimal.ZERO : informationVO.getAaa042();//单位缴费比例
//                    BigDecimal aaa043 = ValidateUtil.isEmpty(informationVO.getAaa043()) ? BigDecimal.ZERO : informationVO.getAaa043();//单位划账户比例
                    if (aaa042.compareTo(tmp_aaa042) > 0) {
                        tmp_aaa042 = aaa042;
                    }
                }
                if (tmp_aae041.intValue() >= 199801 && tmp_aae041.intValue() < 201001) {//临时账户2010年前的缴费按一般账户转移
                    //tmp_aaa042 = tmp_aaa042;
                }

            }
            tcje = tcje.add(tmp_aae180.multiply(tmp_aaa042));
        }
        tcje = tcje.setScale(2, BigDecimal.ROUND_HALF_UP);

        //1998年1月1日前账户中个人缴费累计储存额
        BigDecimal aic093 = before_1998_gr.add(after_1998_gr);


        // 1998年1月1日至调转上年末个人账户累计储存额
        BigDecimal aic089;
        if ("52".equals("")) {//20220615 贵州提出判断，建账年月在199801之后，计算98年起止调转上年末的不扣减98年之前账户累计存储额
            if (aac032 >= 199801) {
                aic089 = tzsnzje.subtract(before_1998_dw).subtract(after_1998_dw);
            } else {
                aic089 = tzsnzje.subtract(before_1998_dw).subtract(before_1998_gr).subtract(after_1998_dw);
            }
        } else {
            /**
             * 有如下情况：到账年度全为系统当年，上年末累计存储额则为0 ，但是补缴明细有98年前单位划账户部分，
             * 如此原计算方式 tzsnzje.subtract(before_1998_dw).subtract(before_1998_gr).subtract(after_1998_dw)  则会出现负数，
             * 所以改为如果上年末累计存储额则为0 ，则不做减法
             *
             * 示例;陈小明，个人编号是100010200306，建账年月是96年，93年有缴费但无利率，
             * 94 无缴费,95没有缴费但是有利率，导致96年当年，有记账金额，没有记账利息，
             */
            if (tzsnzje.compareTo(BigDecimal.ZERO) > 0) {
                aic089 = tzsnzje.subtract(before_1998_dw).subtract(before_1998_gr).subtract(after_1998_dw);
            } else {
                aic089 = BigDecimal.ZERO;
            }
        }

        BigDecimal aic082 = tzdnbj; // 调转当年记入个人账户本金金额
        BigDecimal aic083 = aic093.add(aic089).add(aic082); // 个人账户基金转移额
        BigDecimal aic084 = tcje; // 统筹金额
        BigDecimal aic102; // 基金转移总额
        if (aic084.compareTo(BigDecimal.ZERO) > 0) {
            aic102 = aic083.add(aic084);
        } else {
            aic102 = aic083;
        }


        // 组装返回值
        Ic90Info informationInfo_1 = new Ic90Info();

        Sequence sequence_aaz259 = new Sequence();
        sequence_aaz259.setName("aaz259");
        informationInfo_1.setAaz259(new BigDecimal(sequenceService.nextSequence(sequence_aaz259)));//基本养老保险关系转移接续信息表ID:NUMBER(20,0)

        Sequence sequence_aaz341 = new Sequence();
        sequence_aaz341.setName("aaz341");
        informationInfo_1.setAaz341(new BigDecimal(sequenceService.nextSequence(sequence_aaz341)));//系统跟踪流水号:NUMBER(18,0)


        informationInfo_1.setAab301(transferPersonInfo.getAab359());//转出地行政区划代码:VARCHAR2(6)
        informationInfo_1.setAab299(transferPersonInfo.getAab299());//转入地行政区划代码:VARCHAR2(6)

        if(ValidateUtil.isEmpty(transferPersonInfo.getAae270())){
            Sequence sequence_aae270 = new Sequence();
            sequence_aae270.setName("aae270");
            informationInfo_1.setAae270(sequenceService.nextSequence(sequence_aae270));//联系函编号:VARCHAR2(20)

        }else{
            informationInfo_1.setAae270(transferPersonInfo.getAae270());//联系函编号:VARCHAR2(20)

        }


        Sequence sequence_aae405 = new Sequence();
        sequence_aae405.setName("aae405");
        informationInfo_1.setAae405(sequenceService.nextSequence(sequence_aae405));//信息表编号:VARCHAR2(20) Sequence.next("aae405")


        informationInfo_1.setAac319(transferPersonInfo.getAac001().toString());//转出地人员编号:VARCHAR2(20)
        informationInfo_1.setAac001(transferPersonInfo.getAac001());//人员编号:NUMBER(20,0)
        informationInfo_1.setAac002(transferPersonInfo.getAac002());//社会保障号码:VARCHAR2(18)
        informationInfo_1.setAac003(transferPersonInfo.getAac003());//姓名:VARCHAR2(100)
        informationInfo_1.setAac004(transferPersonInfo.getAac004());//性别:VARCHAR2(1)
        informationInfo_1.setAac006(transferPersonInfo.getAac006());//出生日期:NUMBER(8,0)
        informationInfo_1.setAac010(transferPersonInfo.getAac010());//户口所在地址:VARCHAR2(300)
        informationInfo_1.setAae473(transferPersonInfo.getAae473());//转移账户类别:VARCHAR2(1)
        informationInfo_1.setAac028(transferPersonInfo.getAac028());//农民工标识:VARCHAR2(1)
        informationInfo_1.setAae035(BigDecimalUtil.getBigDecimal(DateUtil.getCurrentTime("yyyyMMdd")));//转移日期:NUMBER(8,0)
        informationInfo_1.setAic113(Constant.AIC113_1_QYZGYLBXZDNZY);//养老保险转移制度方向:VARCHAR2(1)
        informationInfo_1.setAae173(Constant.AAE173_1_ZZLD);//转移类型:VARCHAR2(1)
        informationInfo_1.setAab004(transferPersonInfo.getAab004());//转出单位名称:VARCHAR2(450)
        informationInfo_1.setAac032(transferPersonInfo.getAae206());//本人建立个人账户日期:NUMBER(6,0)
        informationInfo_1.setAaz159(transferPersonInfo.getAaz159());//参保关系id


        informationInfo_1.setAab305(transferPersonInfo.getAab305());//首次参保地实行个人缴费时间:NUMBER(6,0)
        informationInfo_1.setAic093(aic093);//:NUMBER(16,2)
        informationInfo_1.setAic089(aic089);//:NUMBER(16,2)
        informationInfo_1.setAic082(aic082);//调转当年记入个人账户本金金额:NUMBER(16,2)
        informationInfo_1.setAic083(aic083);//个人账户基金转移额:NUMBER(16,2)
//        if (ValidateUtil.isNotEmpty(informationInfo.getAab301()) &&ValidateUtil.isNotEmpty(informationInfo.getAab299()) ) {
//             if (informationInfo.getAab301().substring(0, 2).equals(informationInfo.getAab299().substring(0, 2))) {
//            informationInfo.setAic084(BigDecimal.ZERO);//统筹基金转移额:NUMBER(16,2)
//            informationInfo.setAic102(aic102.subtract(aic084));//转移基金总额:NUMBER(16,2)
//            } else {
//                informationInfo.setAic084(aic084);//统筹基金转移额:NUMBER(16,2)
//                informationInfo.setAic102(aic102);//转移基金总额:NUMBER(16,2)
//            }
//        }else {
        informationInfo_1.setAic084(aic084);//统筹基金转移额:NUMBER(16,2)
        informationInfo_1.setAic102(aic102);//转移基金总额:NUMBER(16,2)
//        }


        //informationInfo.setAaa146(this.transferOtherOrgInfo.getBaa146());//转入地社保机构名称:VARCHAR2(200)
        //informationInfo.setAab300(this.transferOrgInfo.getAaa146());//转出地社保机构名称:VARCHAR2(200)
        informationInfo_1.setAad019(null);//基金划转银行票据号:NUMBER(20,0)

        Sequence sequence_aae062 = new Sequence();
        sequence_aae062.setName("aae062");
        informationInfo_1.setAae062(new BigDecimal(sequenceService.nextSequence(sequence_aae062)));//人员转移流水号:NUMBER(16,0)  Sequence.next("aae062")
        informationInfo_1.setAae013("");//说明:VARCHAR2(1000)


        //循环缴费信息，获取ic90需要的值
        BigDecimal aae041_min = BigDecimalUtil.getBigDecimal(999912);
        BigDecimal aae042_max = BigDecimalUtil.getBigDecimal(0);
        BigDecimal aae201_sum = BigDecimalUtil.getBigDecimal(0);
        for (InformationDetailInfo informationDetailInfo : informationVOS) {
            informationVO = (Ic91Info) informationDetailInfo;

            if (aae041_min.compareTo(informationVO.getAae041()) > 0) {
                aae041_min = informationVO.getAae041();
            }
            if (aae042_max.compareTo(informationVO.getAae042()) < 0 && informationVO.getAae202().intValue() > 0) {
                aae042_max = informationVO.getAae042();
            }
            if (informationVO.getAae202().intValue() > 0) {
                aae201_sum = aae201_sum.add(informationVO.getAae202());
            }
        }
        if (!ValidateUtil.isEmpty(transferPersonInfo.getAac007())) {
            informationInfo_1.setAac007(BigDecimalUtil.getBigDecimal(transferPersonInfo.getAac007().toString().substring(0, 6)));

        }

        if (true) { //云南的本地实际缴费月数全部一起取
            informationInfo_1.setAae030(aae041_min);
            informationInfo_1.setAae031(aae042_max);
            informationInfo_1.setAae201(aae201_sum);
            if (aae041_min.intValue() > informationInfo_1.getAac032().intValue()) {
                informationInfo_1.setAac049(informationInfo_1.getAac032());
            } else {
                informationInfo_1.setAac049(aae041_min);
            }
            //云南省同时参加了企业和机关，做企业转机关的时候，后参保的参加工作时间大于第一段缴费开始年月取最小的时间作为参保日期
            informationInfo_1.setAac007(informationInfo_1.getAac007().compareTo(informationInfo_1.getAac049()) <= 0 ? informationInfo_1.getAac007() : informationInfo_1.getAac049());
        } else {

            NPETool.isEmptyThrowException(ac08s, "缴费信息");
            ac08s = ac08s.stream().filter(ac08 ->
                    !Constant.AAE741_4_YDZDNZR.equals(ac08.getAsString("aae741"))
                            && !Constant.AAE741_5_YDZDNZR.equals(ac08.getAsString("aae741"))
                            && !Constant.AAE741_6_KZDZR.equals(ac08.getAsString("aae741"))
                            && !Constant.AAE741_7_KZDZR.equals(ac08.getAsString("aae741"))
                            && !Constant.AAE793_1061_ZR.equals(ac08.getAsString("aae793"))
                            && !Constant.AAE793_1062_JGZR.equals(ac08.getAsString("aae793"))
                            && !Constant.AAE793_1063_CXZR.equals(ac08.getAsString("aae793"))
                            && !Constant.AAE793_1064_JRZR.equals(ac08.getAsString("aae793"))
                            && !Constant.AAE793_1010_ZRCF.equals(ac08.getAsString("aae793"))

            ).collect(Collectors.toList());
            //20221019增加校验-如果建立账户时间早于aae041_min,首次参保年月取建立账户时间
            if (aae041_min.intValue() > informationInfo_1.getAac032().intValue()) {
                informationInfo_1.setAac049(informationInfo_1.getAac032());
            } else {
                informationInfo_1.setAac049(aae041_min);
            }
            //20220316同时存在本地缴费和转入明细，转出时开始结束时间取本地实缴明细的最大最小月份，月数相加求和；只有转入明细再转出时开始结束时间取转入时间段的最大最小时间，月数为0
            if (ValidateUtil.isEmpty(ac08s)) {
                informationInfo_1.setAae030(aae041_min);
                informationInfo_1.setAae031(aae042_max);
                informationInfo_1.setAae201(BigDecimal.ZERO);
            } else {
                aae041_min = BigDecimalUtil.getBigDecimal(999912);
                aae042_max = BigDecimalUtil.getBigDecimal(0);
                aae201_sum = BigDecimalUtil.getBigDecimal(0);
                for (MyMap ac08 : ac08s) {

                    if (aae041_min.compareTo(ac08.getAsBigDecimal("aae003")) > 0) {
                        aae041_min = ac08.getAsBigDecimal("aae003");
                    }
                    if (aae042_max.compareTo(ac08.getAsBigDecimal("aae003")) < 0 && ac08.getAsBigDecimal("aae202").intValue() > 0) {
                        aae042_max = ac08.getAsBigDecimal("aae003");
                    }
                    if (ac08.getAsBigDecimal("aae202").intValue() > 0) {
                        aae201_sum = aae201_sum.add(ac08.getAsBigDecimal("aae202"));
                    }
                }

                informationInfo_1.setAae030(aae041_min);
                informationInfo_1.setAae031(aae042_max);
                informationInfo_1.setAae201(aae201_sum);
            }
        }


        if (!ValidateUtil.isEmpty(transferPersonInfo.getAab305())) {

            informationInfo_1.setAab305(transferPersonInfo.getAab305());
        }


        return deductionMonery(informationVOS, informationInfo_1, zynd);
    }

    /**
     * 标准信息表 扣减超过账户规模部分金额本金，不扣减利息
     *
     * @param informationVOS
     * @param informationInfo
     * @param zynd
     * @return
     */
    private Ic90Info deductionMonery(List<Ic91Info> informationVOS, Ic90Info informationInfo, Integer zynd) {

        int zysn = zynd - 1;

        //单位划账户比例
        BigDecimal aaa043;
        //个人缴费比例
        BigDecimal aaa041;
        //缴费基数
        BigDecimal aae180;
        //标准账户规模比例
        BigDecimal bl_bz = BigDecimal.ZERO;
        //月数
        BigDecimal aae202;
        //扣减金额 98-zysn
        BigDecimal subMoney_zysn = BigDecimal.ZERO;
        //扣减金额 zydn
        BigDecimal subMoney_zydn = BigDecimal.ZERO;


        for (int i = 0; i < informationVOS.size(); i++) {

            Ic91Info informationVO = informationVOS.get(i);

            aaa043 = ValidateUtil.isEmpty(informationVO.getAaa043()) ? BigDecimal.ZERO : informationVO.getAaa043();
            aaa041 = ValidateUtil.isEmpty(informationVO.getAaa041()) ? BigDecimal.ZERO : informationVO.getAaa041();
            aae180 = ValidateUtil.isEmpty(informationVO.getAae180()) ? BigDecimal.ZERO : informationVO.getAae180();
            aae202 = ValidateUtil.isEmpty(informationVO.getAae202()) ? BigDecimal.ZERO : informationVO.getAae202();

            //!"曾办理异地转入".equals(informationVO.getAae013()) && 20220610 贵州要求明细比例超出部分转出时进行扣减
            if (informationVO.getAae041().intValue() >= 199801) {

                //处理98年到调转上年金额
                if (Integer.valueOf(informationVO.getAae001().toString().substring(0, 4)) <= zysn) {
                    if (informationVO.getAae042().intValue() <= 200512) {
                        bl_bz = new BigDecimal("0.11");
                    } else if (informationVO.getAae041().intValue() > 200512) {
                        bl_bz = new BigDecimal("0.08");
                    }
                    if (aaa041.add(aaa043).compareTo(bl_bz) > 0) {
                        subMoney_zysn = subMoney_zysn.add(aaa041.add(aaa043).subtract(bl_bz).multiply(aae180).multiply(aae202));
                    }
                }

                //处理转移当年金额
                if (Integer.valueOf(informationVO.getAae001().toString().substring(0, 4)).intValue() == zynd) {
                    if (informationVO.getAae042().intValue() <= 200512) {
                        bl_bz = new BigDecimal("0.11");
                    } else if (informationVO.getAae041().intValue() > 200512) {
                        bl_bz = new BigDecimal("0.08");
                    }
                    if (aaa041.add(aaa043).compareTo(bl_bz) > 0) {
                        subMoney_zydn = subMoney_zydn.add(aaa041.add(aaa043).subtract(bl_bz).multiply(aae180).multiply(aae202));
                    }
                }
            }
        }


        //1998年1月1日至调转上年末个人账户累计储存额
        informationInfo.setAic089(informationInfo.getAic089().subtract(subMoney_zysn).setScale(2, BigDecimal.ROUND_HALF_UP));
        //调转当年记入个人账户本金金额
        informationInfo.setAic082(informationInfo.getAic082().subtract(subMoney_zydn).setScale(2, BigDecimal.ROUND_HALF_UP));
        //个人账户基金转移额
        informationInfo.setAic083(informationInfo.getAic082().add(informationInfo.getAic089()).add(informationInfo.getAic093()));
        //转移基金总额
        informationInfo.setAic102(informationInfo.getAic083().add(informationInfo.getAic084()));

        return informationInfo;
    }

    /**
     * 刪除建账前台账 并备注 "包括建账前个人缴费"
     *
     * @param informationVOS
     */
    @Override
    public void deleteAccountBeforeAac032(List<Ic91Info> informationVOS, BigDecimal aae206, TransferPersonInfo transferPersonInfo) {


        BigDecimal aae381 = BigDecimal.ZERO;
        BigDecimal aae264 = BigDecimal.ZERO;
        BigDecimal aae269 = BigDecimal.ZERO;
        BigDecimal aae265 = BigDecimal.ZERO;
        // 循环处理数据
        for (Ic91Info transferInformationVO : informationVOS) {


            //处理建账前数据
            if (!ValidateUtil.isEmpty(aae206)) {
                if (transferInformationVO.getAae001().intValue() < transferPersonInfo.getAae206().intValue() / 100) {

                    aae381 = aae381.add(ValidateUtil.isEmpty(transferInformationVO.getAae381()) ? BigDecimal.ZERO : transferInformationVO.getAae381());
                    aae264 = aae264.add(ValidateUtil.isEmpty(transferInformationVO.getAae264()) ? BigDecimal.ZERO : transferInformationVO.getAae264());
                    aae269 = aae269.add(ValidateUtil.isEmpty(transferInformationVO.getAae269()) ? BigDecimal.ZERO : transferInformationVO.getAae269());
                    aae265 = aae265.add(ValidateUtil.isEmpty(transferInformationVO.getAae265()) ? BigDecimal.ZERO : transferInformationVO.getAae265());
                    transferInformationVO.setAae382(null);
                    transferInformationVO.setAae273(null);
                    transferInformationVO.setAae381(null); // 记账金额
                    transferInformationVO.setAae264(null); // 记账金额中的个人缴费部分
                    transferInformationVO.setAae269(null); // 记账利息
                    transferInformationVO.setAae265(null); // 记账利息中的个人缴费部分
                }
            }
        }

        Ic91Info transferInformation = null;
        //存在建立账户前缴费 台帐
        if (aae381.compareTo(BigDecimal.ZERO) > 0 || aae264.compareTo(BigDecimal.ZERO) > 0 || aae269.compareTo(BigDecimal.ZERO) > 0 || aae265.compareTo(BigDecimal.ZERO) > 0) {
            // 循环处理数据
            for (Ic91Info transferInformationVO : informationVOS) {
                //处理建账前数据
                if (!ValidateUtil.isEmpty(aae206)) {

                    if (transferInformationVO.getAae001().intValue() == aae206.intValue() / 100
                            && !ValidateUtil.isEmpty(transferInformationVO.getAae382())
                            && transferInformationVO.getAae382().compareTo(BigDecimal.ZERO) > 0) {

                        transferInformation = transferInformationVO;
                        break;
                    }
                    //还需要考虑 建账当年做业务年度切换的情况
                    if (transferInformationVO.getAae001().intValue() - 1 == aae206.intValue() / 100
                            && !ValidateUtil.isEmpty(transferInformationVO.getAae382())
                            && transferInformationVO.getAae382().compareTo(BigDecimal.ZERO) > 0) {
                        transferInformation = transferInformationVO;
                        break;
                    }

                }

            }
            if (!ValidateUtil.isEmpty(transferInformation)) {
                transferInformation.setAae381(aae381.add(ValidateUtil.isEmpty(transferInformation.getAae381()) ? BigDecimal.ZERO : transferInformation.getAae381())); // 记账金额
                transferInformation.setAae264(aae264.add(ValidateUtil.isEmpty(transferInformation.getAae264()) ? BigDecimal.ZERO : transferInformation.getAae264())); // 记账金额中的个人缴费部分
                transferInformation.setAae269(aae269.add(ValidateUtil.isEmpty(transferInformation.getAae269()) ? BigDecimal.ZERO : transferInformation.getAae269())); // 记账利息
                transferInformation.setAae265(aae265.add(ValidateUtil.isEmpty(transferInformation.getAae265()) ? BigDecimal.ZERO : transferInformation.getAae265())); // 记账利息中的个人缴费部分
                setAae013(transferInformation, "包括建账前个人缴费");

                /**
                 * 此处对于甘肃本地94年前没有记账利率，而95年到建账年度又没有缴费的人，
                 * 例如是：94年前的记账金额乘以利率0，则记账利息等于0， 加上 95年到建账年的每一年的当年记账利息 = （当年记账金额 0 乘以 利率） 结果是 还是 0
                 * 但是事实上自94年后，每年都有上一年的本金生成的利息。为处理这种问题，现在临时处理方式如下
                 * 将建账年度的累计额减去当年记账金额 其值作为建账当年的记账利息数据
                 *
                 * 示例;陈小明，个人编号是100010200306，建账年月是96年，93年有缴费但无利率，
                 * 94 无缴费,95没有缴费但是有利率，导致96年当年，有记账金额，没有记账利息，
                 */
                if (BigDecimal.ZERO.compareTo(transferInformation.getAae269()) == 0) {
                    aae269 = transferInformation.getAae382().subtract(transferInformation.getAae381());
                    transferInformation.setAae269(aae269);
                }
                if (BigDecimal.ZERO.compareTo(transferInformation.getAae265()) == 0) {
                    aae265 = transferInformation.getAae273().subtract(transferInformation.getAae264());
                    transferInformation.setAae265(aae265);
                }
            }

        }

    }


    private void setAae013(Ic91Info transferInformationVO, String aae013) {
        if (ValidateUtil.isNotEmpty(transferInformationVO.getAae013())) {
            transferInformationVO.setAae013(transferInformationVO.getAae013() + "," + aae013);
        } else {
            transferInformationVO.setAae013(aae013);
        }
    }

    @Override
    public List<MyMap> getNewAc51s(List<Map> ac51s) {

        //查询账户
        List<MyMap> newAc51s = new ArrayList<>();
        if (ValidateUtil.isNotEmpty(ac51s)) {

            Map<String, List<Map>> groupAc51 = ac51s.stream().collect(Collectors.groupingBy(info -> info.get("aae001").toString()));


            List<Map> ac51sCal = new ArrayList<>();

            Map ac51Map = null;
            MyMap ac51MyMap = null;
            List<Map> ac51GroupList;
            for (String aae001 : groupAc51.keySet()) {
                ac51GroupList = groupAc51.get(aae001);
                ac51Map = new MyMap();
                BigDecimal aae849 = BigDecimal.ZERO; //截至上年末个人账户单位缴费部分划转累计本息 N NUMBER -->
                BigDecimal aae259 = BigDecimal.ZERO; //截至上年末个人账户单位缴费部分划转本息在本年产生的利息 N NUMBER -->
                BigDecimal aae262 = BigDecimal.ZERO; //本年单位缴费部分划入个人账户本金 N NUMBER -->
                BigDecimal aae263 = BigDecimal.ZERO; //本年单位缴费部分划入个人账户本金所产生的利息 N NUMBER -->
                BigDecimal aae850 = BigDecimal.ZERO; //截至本年末个人账户单位缴费部分划转累计本息 N NUMBER -->
                BigDecimal aae851 = BigDecimal.ZERO; //截至上年末个人账户个人缴费部分划转累计本息 N NUMBER -->
                BigDecimal aae260 = BigDecimal.ZERO; //截至上年末个人账户个人缴费部分划转本息在本年产生的利息 N NUMBER -->
                BigDecimal aae264 = BigDecimal.ZERO; //本年个人缴费部分划入个人账户本金 N NUMBER -->
                BigDecimal aae265 = BigDecimal.ZERO; //本年个人缴费部分划入个人账户本金所产生的利息 N NUMBER -->
                BigDecimal aae852 = BigDecimal.ZERO; //截至本年末个人账户个人缴费部分划转累计本息 N NUMBER -->
                BigDecimal aae853 = BigDecimal.ZERO; //截至上年末个人账户其他部分划转累计本息 N NUMBER -->
                BigDecimal aae854 = BigDecimal.ZERO; //截至上年末个人账户其他部分划转本息在本年产生的利息 N NUMBER -->
                BigDecimal aae855 = BigDecimal.ZERO; //本年其他部分划入个人账户本金 N NUMBER -->
                BigDecimal aae856 = BigDecimal.ZERO; //本年其他部分划入个人账户本金所产生的利息 N NUMBER -->
                BigDecimal aae857 = BigDecimal.ZERO; //截至本年末个人账户其他部分划转累计本息 N NUMBER -->
                for (Map map : ac51GroupList) {
                    ac51MyMap = new MyMap(map);
                    aae849 = aae849.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae849")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae849"));
                    aae259 = aae259.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae259")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae259"));
                    aae262 = aae262.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae262")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae262"));
                    aae263 = aae263.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae263")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae263"));
                    aae850 = aae850.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae850")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae850"));
                    aae851 = aae851.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae851")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae851"));
                    aae260 = aae260.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae260")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae260"));
                    aae264 = aae264.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae264")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae264"));
                    aae265 = aae265.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae265")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae265"));
                    aae852 = aae852.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae852")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae852"));
                    aae853 = aae853.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae853")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae853"));
                    aae854 = aae854.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae854")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae854"));
                    aae855 = aae855.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae855")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae855"));
                    aae856 = aae856.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae856")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae856"));
                    aae857 = aae857.add(ValidateUtil.isEmpty(ac51MyMap.getAsBigDecimal("aae857")) ? BigDecimal.ZERO : ac51MyMap.getAsBigDecimal("aae857"));
                }

                ac51Map.put("aae001", aae001);
                ac51Map.put("aae849", aae849);
                ac51Map.put("aae259", aae259);
                ac51Map.put("aae262", aae262);
                ac51Map.put("aae263", aae263);
                ac51Map.put("aae850", aae850);
                ac51Map.put("aae851", aae851);
                ac51Map.put("aae260", aae260);
                ac51Map.put("aae264", aae264);
                ac51Map.put("aae265", aae265);
                ac51Map.put("aae852", aae852);
                ac51Map.put("aae853", aae853);
                ac51Map.put("aae854", aae854);
                ac51Map.put("aae855", aae855);
                ac51Map.put("aae856", aae856);
                ac51Map.put("aae857", aae857);

                ac51sCal.add(ac51Map);
            }
            //查询历年台账
            if (ValidateUtil.isNotEmpty(ac51sCal)) {
                //按bae500降序
                Collections.sort(ac51sCal, new Comparator<Map>() {
                    @Override
                    public int compare(Map o1, Map o2) {
                        Integer i1 = Integer.valueOf(o1.get("aae001").toString());
                        Integer i2 = Integer.valueOf(o2.get("aae001").toString());
                        if (i1.intValue() > i2.intValue()) {
                            return 1;
                        }
                        return -1;
                    }
                });
                newAc51s = convertAc51(ac51sCal);
            }
        }

        return newAc51s;
    }

    /**
     * 将中台查询出的ac51 汇总成符合信息表的台帐
     *
     * @param ac51s
     * @return
     */
    @Override
    public List<MyMap> convertAc51(List<Map> ac51s) {
        List<MyMap> ac51List = new ArrayList<>();


        //BigDecimal aae849 = BigDecimal.ZERO;//截至上年末个人账户单位缴费部分划转累计本息
        //BigDecimal aae850 = BigDecimal.ZERO;//截至本年末个人账户单位缴费部分划转累计本息
        //BigDecimal aae851 = BigDecimal.ZERO;//截至上年末个人账户个人缴费部分划转累计本息
        //BigDecimal aae852 = BigDecimal.ZERO;//截至本年末个人账户个人缴费部分划转累计本息
        //BigDecimal aae262 = BigDecimal.ZERO;//本年单位缴费部分划入个人账户本金
        //BigDecimal aae263 = BigDecimal.ZERO;//本年单位缴费部分划入个人账户本金所产生的利息
        //BigDecimal aae264 = BigDecimal.ZERO;//本年个人缴费部分划入个人账户本金
        //BigDecimal aae265 = BigDecimal.ZERO;//本年个人缴费部分划入个人账户本金所产生的利息
        //BigDecimal aae259 = BigDecimal.ZERO;//截至上年末个人账户单位缴费部分划转本息在本年产生的利息
        //BigDecimal aae260 = BigDecimal.ZERO;//截至上年末个人账户个人缴费部分划转本息在本年产生的利息
        //BigDecimal aae873 = BigDecimal.ZERO;//本年本金总和
        //BigDecimal aae874 = BigDecimal.ZERO;//本年利息总和
        //BigDecimal aae875 = BigDecimal.ZERO;//本年补缴历年本金
        //BigDecimal aae876 = BigDecimal.ZERO;//本年补缴历年利息


        MyMap ac51Map;
        MyMap resultMap;
        for (Map m : ac51s) {
            ac51Map = new MyMap(m);
            if (BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae849")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae259")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae262")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae263")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae850")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae851")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae260")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae264")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae265")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae852")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae853")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae854")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae855")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae856")) == 0
                    && BigDecimal.ZERO.compareTo(ac51Map.getAsBigDecimal("aae857")) == 0) {
                continue;

            }
            resultMap = new MyMap();
            resultMap.put("aae001", ac51Map.getAsBigDecimal("aae001"));//当年记账金额
            resultMap.put("aae381", ac51Map.getAsBigDecimal("aae262")
                    .add(ac51Map.getAsBigDecimal("aae264"))
                    .add(ac51Map.getAsBigDecimal("aae855")));//当年记账金额
            resultMap.put("aae264", ac51Map.getAsBigDecimal("aae264"));//当年记账金额个人部分
            resultMap.put("aae269", ac51Map.getAsBigDecimal("aae263")
                    .add(ac51Map.getAsBigDecimal("aae265"))
                    .add(ac51Map.getAsBigDecimal("aae856")));//当年记账利息
            resultMap.put("aae265", ac51Map.getAsBigDecimal("aae265"));//当年记账利息个人部分
            resultMap.put("aae382", ac51Map.getAsBigDecimal("aae850")
                    .add(ac51Map.getAsBigDecimal("aae852"))
                    .add(ac51Map.getAsBigDecimal("aae857")));//至本年末账户累计储存额
            resultMap.put("aae273", ac51Map.getAsBigDecimal("aae852"));//至本年末账户累计储存额中的个人缴费部分
            ac51List.add(resultMap);
        }
        return ac51List;
    }

    @Override
    public Map packageParam(InformationInfo informationInfo, List<InformationDetailInfo> informationDetailInfos, List<InformationOtherInfo> informationOtherInfos, TransferPersonInfo transferPersonInfo, List<MyMap> funds, String aac306, String aaf200, String aaf216, String aaf217, String aae013, String aae140, String aae241, String infoKey, String detailsKey, String othersKey) {
        Map map = new HashMap();
//todo 加序列

        Sequence sequence_aaz341 = new Sequence();
        Sequence sequence_infoKey = new Sequence();
        Sequence sequence_aae062 = new Sequence();


        sequence_aaz341.setName("aaz341");
        sequence_infoKey.setName(infoKey.toLowerCase());
        sequence_aae062.setName("aae062");

        String aaz341 = sequenceService.nextSequence(sequence_aaz341);
        String infoKey_value = sequenceService.nextSequence(sequence_infoKey);
        String aae062 = sequenceService.nextSequence(sequence_aae062);

        String yyyyMMdd = DateUtil.getCurrentTime("yyyyMMdd");

        Map handleMap = new HashMap();


        List<Map> information = new ArrayList<>();

        MyMap informationInfoMap = MyMap.convertToMap(informationInfo);


        if (Constant.AAC306_1_BD.equals(aac306)) {
            informationInfoMap.put("aae736", handleMap.get("aae011"));//上传方经办人
            informationInfoMap.put("aae739", DateUtil.getCurrentTime("yyyyMMdd"));//上传方经办时间
            informationInfoMap.put("aaf200", aaf200);
            informationInfoMap.put("aaf216", aaf216);
            informationInfoMap.put("aaf217", aaf217);
            informationInfoMap.put("aae013", aae013);
        } else {

            if (ValidateUtil.isEmpty(informationInfoMap.get("aae736"))) {
                informationInfoMap.put("aae736", handleMap.get("aae011"));
            }
            informationInfoMap.put("aae739", yyyyMMdd);

            //基金到账时间
            if (ValidateUtil.isNotEmpty(funds)) {
                informationInfoMap.put("aab191", funds.get(0).getAsString("aab191"));
            }

        }
        informationInfoMap.put("aae140", aae140);
        informationInfoMap.put("aae241", aae241);
        informationInfoMap.put("aac001", transferPersonInfo.getAac001());
        informationInfoMap.put("aac002", transferPersonInfo.getAac002());
        informationInfoMap.put("aac003", transferPersonInfo.getAac003());
        informationInfoMap.put("aac006", transferPersonInfo.getAac006());
        informationInfoMap.put("aac004", transferPersonInfo.getAac004());
        informationInfoMap.put("aaz159", transferPersonInfo.getAaz159());
        informationInfoMap.put("aac306", aac306);
        informationInfoMap.put("aae062", aae062);
        informationInfoMap.put("aaz341", aaz341);
        informationInfoMap.put("aae012", handleMap.get("aae011"));
//        informationInfoMap.put("aab305", this.aab305);
        informationInfoMap.put(infoKey.toLowerCase(), infoKey_value);
        informationInfoMap.putAll(handleMap);
        information.add(informationInfoMap);
        map.put("info", information);

        List<Map> informationDetail = new ArrayList<>();
        Map detailsMap;
        Sequence sequence_detailsKey = new Sequence();
        sequence_detailsKey.setName(detailsKey.toLowerCase());

        for (InformationDetailInfo informationDetailInfo : informationDetailInfos) {
            detailsMap = BeanUtil.beanToMap(informationDetailInfo);

            if (Constant.AAC306_2_YD.equals(aac306)) {

                detailsMap.put("aac319", transferPersonInfo.getAac001());
            } else {
                detailsMap.put("aac319", detailsMap.get("aac001"));

            }
            detailsMap.put(detailsKey.toLowerCase(), sequenceService.nextSequence(sequence_detailsKey));
            detailsMap.put(infoKey.toLowerCase(), infoKey_value);
            detailsMap.put("aaz341", aaz341);
            detailsMap.put("aaz159", transferPersonInfo.getAaz159());
            detailsMap.put("aac001", transferPersonInfo.getAac001());
            detailsMap.put("aac306", aac306);
            detailsMap.put("aae062", aae062);

            detailsMap.putAll(handleMap);

            informationDetail.add(detailsMap);
        }
        map.put("infoDetails", informationDetail);


        if (!ValidateUtil.isEmpty(informationOtherInfos)) {
            List<Map> informationOther = new ArrayList<>();
            Map othersMap;
            Sequence sequence_othersKey = new Sequence();
            sequence_othersKey.setName(othersKey.toLowerCase());
            for (InformationOtherInfo informationOtherInfo : informationOtherInfos) {
                othersMap = BeanUtil.beanToMap(informationOtherInfo);
                othersMap.put("aaz341", aaz341);
                othersMap.put(othersKey.toLowerCase(), sequenceService.nextSequence(sequence_othersKey));
                othersMap.putAll(handleMap);
                othersMap.put("aac306", aac306);

                othersMap.put("aae140", aae140);
                othersMap.put("aae241", aae241);
                othersMap.put("aac001", transferPersonInfo.getAac001());
                othersMap.put("aac002", transferPersonInfo.getAac002());
                othersMap.put("aac003", transferPersonInfo.getAac003());
                othersMap.put("aac006", transferPersonInfo.getAac006());
                othersMap.put("aac004", transferPersonInfo.getAac004());
                othersMap.put("aaz159", transferPersonInfo.getAaz159());
                othersMap.put("aae062", aae062);

                if (ValidateUtil.isEmpty(othersMap.get("aae736"))) {
                    othersMap.put("aae736", handleMap.get("aae011"));
                }
                othersMap.put("aae739", yyyyMMdd);

                informationOther.add(othersMap);
            }
            map.put("infoOther", informationOther);

        }

        String infoKey1 = infoKey_value;
        String aad019 = null;
        if (!ValidateUtil.isEmpty(informationInfoMap.get("aad019"))) {
            aad019 = informationInfoMap.get("aad019").toString();
        }
        map.put("aad019", aad019);
        map.put("infoKey", infoKey1);
        return map;
    }


    public List<MyMap> queryPersonBusinessYears(String aaz159, String aac001, Integer aae001) {

        NPETool.isEmptyThrowException(aaz159, "参保关系id");
        NPETool.isEmptyThrowException(aac001, "人员编号");
        NPETool.isEmptyThrowException(aae001, "年度");

        Map<Integer, List<AnnualConversionTransverse>> businessYears = accountComputer.produceAnnualBusinessControls(aaz159, aac001, aae001);
        List<Map> aa29s = new ArrayList<>();

        if (!ValidateUtil.isEmpty(businessYears)) {

            List<AnnualConversionTransverse> annualConversionTransverseList;
            for (Integer year : businessYears.keySet()) {
                annualConversionTransverseList = businessYears.get(year);
                if (ValidateUtil.isNotEmpty(annualConversionTransverseList)) {
                    aa29s.addAll(ListUtil.convertListEntity2ListMap(annualConversionTransverseList));
                }
            }
        }
        return ListUtil.list2MyMapList(aa29s);
    }


}
